注册表单的嵌套属性

时间:2011-12-14 07:54:11

标签: ruby-on-rails

我有一个用户和公司模型,其中用户has_one公司和公司属于用户。我只是想将公司字段从注册表单保存到公司表,其中公司表列是user_id和company_name。我使用以下内容在我的User.rb

中执行此操作
      has_one :company, :class_name => 'Company', :foreign_key => :user_id, :dependent => :destroy
      accepts_nested_attributes_for :company

我的注册表格如下所示

           <h2>Sign up</h2>
  <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>               

<%= devise_error_messages! %>

<p><%= f.label :firstname %><br/>
  <%= f.text_field :firstname %></p>

<p><%= f.label :lastname %><br/>
  <%= f.text_field :lastname %></p>

<p><%= f.label :email %><br/>
  <%= f.email_field :email %></p>

<p><%= f.label :password %><br/>
  <%= f.password_field :password %></p>

<p><%= f.label :password_confirmation %><br/>
  <%= f.password_field :password_confirmation %></p>

<%= fields_for :company do |builder| %>
    <%= builder.label :company %>
    <td><%= builder.text_field :company_name%> </td>
<% end %>

<p><%= f.submit "Sign up" %></p>
<% end %>

<%= render :partial => "devise/shared/links" %>

是否有必要为公司表的user_id设置一个隐藏字段,否则它会自动添加,我也尝试覆盖注册控制器的create方法,但是设计错误消息不起作用。任何人都可以帮助我。我不知道我错过了什么。提前致谢。

1 个答案:

答案 0 :(得分:4)

1)不,你不需要user_id隐藏字段,只需使用fields_for作为方法

<%= f.fields_for :company do |builder| %>
    ...
<% end %>

2)如果用户还没有关联公司,则不会显示fields_for,这会在新记录中出现,所以你可以做 <% f.object.company.build %>作为黑客:) 或者在控制器动作中以正确的方式进行操作

相关问题