嵌套模型表单和update_attributes

时间:2010-10-04 15:59:07

标签: ruby-on-rails attributes update-attributes

我有一个嵌套模型表单,在类Project和类TeamMember之间有一对多关系,在控制器中有一个更新函数,如:

@project = Project.find(params[:id])

@project.update_attributes(params[:project])        

@project.update_attributes(params[:project])

现在,我想在保存发生之前为某些团队成员设置一些未在表单中设置的字段。我无法按原样使用update_attributes函数。

最好的方法是什么?

谢谢, 尼古拉斯。

1 个答案:

答案 0 :(得分:1)

我会调查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查看params是如何嵌套的。

希望这有帮助。