2011-11-02 56 views
4

我使用的设计进行验证,并在会员注册页面我有“组织”,所以当用户登录时,他们将创造一个组织一个文本字段,我希望用户可以与该组织关联(用户模型具有organization_id属性)。我创建了设计视图,并为组织名称添加了fields_for。在我的模型中,我有用户belongs_to:组织和组织has_many:用户(将有多个用户与组织关联)。我一直在试图在没有修改控制器的情况下尝试做到这一点,但都没有运气。请不要在不修改控制器的情况下进行此操作,除非您有一个示例应用程序,您可以在其中实施该示例应用程序并指向该应用程序设计:用户belongs_to的组织

我创建了一个注册控制器被放置在这里:Override devise registrations controller

我只是把一些放语句控制器,和我没有看到这些显示在控制台上,所以它看起来像我我没有得到这个控制器。

我也从app/view/devise/registrations复制我的意见到应用程序/视图/注册之后我的意见似乎来自太空!我创建的组织字段不再显示,并且我似乎无法告诉视图从何处加载。

对不起,不简单,但我不知道该去哪里。

+2

的意见没有从外太空但是从色器件宝石来 - 你必须运行发电机,以创建编辑我认为的意见,但如果他们不创造了创业板的意见来代替。至于你的主要问题,你说你使用fields_for - 用户有accept_nested_attributes_for? – chrispanda

+0

Thanx!现在我知道视图来自哪里。 – Lumbee

回答

7

您可以在用户模型中使用accepts_nested_attributes_fordocumentation

它应该看起来像:

class User < ActiveRecord::Base 
    belongs_to :organization 
    accepts_nested_attributes_for :organization 
end 

class Organization < ActiveRecord::Base 
    has_many :users 
end 

在视图中可以使用Rails的助手或手动创建领域:

<input type="text" name="user[organization_attributes][name]"> 

<% user = User.new(organization => Organization.new) %> 
<%= form_for user do |form| %> 
    <%= form.fields_for user.organization do |organization_form| %> 
    <%= organization_form.text_field :name %> 
    <% end %> 
<% end %> 

编辑: 您的设计视图应该看起来像:

<h2>Sign up</h2> 
<% resource.organization ||= Organization.new %> 
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 
    <div><%= f.label :email %><br /> 
    <%= f.email_field :email %></div> 

    <%= f.fields_for resource.organization do |organization_form| %> 
    <div><%= organization_form.label :name %><br /> 
    <%= organization_form.text_field :name %></div> 
    <% end %> 

    <div><%= f.label :password %><br /> 
    <%= f.password_field :password %></div> 
    <div><%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation %></div> 
    <div><%= f.submit "Sign up" %></div> 
<% end %> 
<%= render :partial => "devise/shared/links" %> 
+0

嘿马立克,这里是我在我看来https://gist.github.com/1335581我收到错误正在尝试:NoMethodError在设计/注册#新 显示的/ home/jlocklear/railsApps /设计/应用/ views/devise/registrations/new.html.erb其中第11行产生: 未定义的方法'users_path'为#<#:0xb65035dc> 提取的源代码(在第11行左右): ... 11:\t <%= form_for user do | form | %> – Lumbee

+0

这是如何做到这一点的例子。我还添加了Devise视图的外观。 –

+0

嘿马雷克。我尝试了这个,但仍然没有雪茄!这是我在控制台上看到的。在2011-11-03 08:53:20 -0400 ...,“user”=> {“email”=>“[email protected]”,“organization”中启动POST“/ users” => {“name”=>“test”},“password”=>“[FILTERED]”,“password_confirmation”=>“[FILTERED]”},“commit”=>“注册”} 警告: 't mass-assign protected attributes:organization 请注意警告。我尝试添加attr_accessible:组织,但没有改变行为。 – Lumbee