2009-01-07 68 views
4

我創建了一個Rails應用程序,並且遇到了一些障礙。我想要一個「爲DataType1創建新記錄」的形式,它不僅爲DataType1創建一個新行,而且還爲DataType2插入最多四個新行。Rails:用多個對象提交表單

我知道所有關於fields_for,但我的問題是,我需要提交多達四個DataType2s,並且他們唯一的連接是DataType1,它們是通過DataType2中的一個字段引用的。

這裏的簡化數據庫:

create_table :data_type_1 do |t| 
    t.string  :title 
    t.text  :body 

    t.timestamps 
end 

create_table :data_type_2 do |t| 
    t.belongs_to :parent 

    t.timestamps 
end 

現在,我都建立了關係,什麼都做。這不是問題。問題是,我似乎無法弄清楚如何用新的DataType1的params傳遞DataType2s的參數。一旦有人向我展示瞭如何執行此操作,我可以很容易地設置新的DataType2以便與新的DataType1相關聯。

下面是我對此刻的形式:

<% form_for(@data_type_1) do |f| %> 
    <%= f.error_messages %> 

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

    # Etc... 

    <p> 
    # New items need to be iterated here 
    # DataType2[1]: [   ] 
    # DataType2[2]: [   ] 
    # DataType2[3]: [   ] 
    # DataType2[4]: [   ] 
    # (Note that these numbers are just examples.) 
    </p> 

    <p> 
    <%= f.submit "Create" %> 
    </p> 
<% end %> 

我是比較新的Rails和我道歉,如果這個問題漫步了一下。

回答

13

This RailsCast討論將「DataType2」列表插入到「DataType1」中。有趣的部分是這些

app/views/projects/_form.html.erb

<% for task in @project.tasks %> 
    <% fields_for "project[task_attributes][]", task do |task_form| %> 
     <p> 
     Task: <%= task_form.text_field :name %> 
     </p> 
    <% end %> 
    <% end %> 

app/models/project.rb

def task_attributes=(task_attributes) 
    task_attributes.each do |attributes| 
    tasks.build(attributes) 
    end 
end 
+3

對於遇到這樣的回答後,Rails的加`accepts_nested_attributes_for`處理模型代碼對你的人。 – graywh 2012-03-27 16:05:30