我有一个嵌套模型表单,在类 Project 和类 TeamMember 之间具有一对多关系,并且在控制器中,更新函数如下:
@project = Project.find(params[:id])
@project.update_attributes(params[:project])
现在,我想在保存之前为某些团队成员设置一些表单中未设置的字段。我不能按原样使用 update_attributes 函数。
最好的方法是什么?
谢谢,尼古拉斯。
我有一个嵌套模型表单,在类 Project 和类 TeamMember 之间具有一对多关系,并且在控制器中,更新函数如下:
@project = Project.find(params[:id])
@project.update_attributes(params[:project])
现在,我想在保存之前为某些团队成员设置一些表单中未设置的字段。我不能按原样使用 update_attributes 函数。
最好的方法是什么?
谢谢,尼古拉斯。
我会研究这个accepts_nested_attributes_for
功能。你可能有类似的东西:
class Project < ActiveRecord::Base
has_one :team
accepts_nested_attributes_for :team
# also this will be useful
validates_associated :team
end
在您的表单中,您将希望使用该fields_for
方法来嵌套您的属性。这可能看起来像:
<% form_for(@project) do |p| %>
<%= p.error_messages %>
<!-- Project name -->
<%= p.text_field :name %>
<% f.fields_for(@project.team) do |t| %>
<!-- Team Name -->
<%= t.text_field :name %>
<% end %>
<%= f.submit 'Create Project' %>
<% end %>
当您提交表单时,您将能够调用@project.update_attributes(params[:project])
它并且它将起作用。您还raise params.inspect
可以查看参数是如何嵌套的。
希望这可以帮助。