我有一个用户和公司模型,其中用户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方法,但是设计错误消息不起作用。任何人都可以帮助我。我不知道我错过了什么。提前致谢。
答案 0 :(得分:4)
1)不,你不需要user_id隐藏字段,只需使用fields_for作为方法
<%= f.fields_for :company do |builder| %>
...
<% end %>
2)如果用户还没有关联公司,则不会显示fields_for,这会在新记录中出现,所以你可以做
<% f.object.company.build %>
作为黑客:)
或者在控制器动作中以正确的方式进行操作