2010-10-04 129 views
1

我有一類項目和類TeamMember之間的一對多的關係嵌套模型的形式,並且在所述控制器的更新功能,如:嵌套模型形式和update_attributes方法

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

@project.update_attributes(params[:project])   

現在,我希望在保存之前設置一些未在表單中爲某些團隊成員設置的字段。我無法按原樣使用update_attributes函數。

什麼是最好的方法來做到這一點?

謝謝, 尼古拉斯。

回答

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來看看這些參數是如何嵌套的。

希望這會有所幫助。

+0

感謝您的回答。實際上,在控制器中,我想使用@project.attributes = params [:project],然後修改一些字段,然後才保存。 (所以不要直接使用@project.update_attributes)。但它不適用於Rails 2.3.8。我終於找到原因(https://rails.lighthouseapp.com/projects/8994/tickets/4766-nested_attributes-fails-to-updatedestroy-when-association-is-loaded-between-setting-attributes-and-saving-父母) – 2010-10-07 00:39:22

+1

尼古拉斯,你應該添加這個作爲答案,並回答自己的問題,如果這是問題。我認爲這個bug也是我遇到的同樣的問題。 – DJTripleThreat 2010-10-07 07:13:46