2013-08-19 66 views
0

本質上,我想使用單個表單填充同一個嵌套屬性對象的多個實例。這可能嗎?如何在表單中創建嵌套屬性的多個實例

我:

class Parent < ActiveRecord::Base 
    has_many :childs 
    acceptes_nested_attributes_for :childs 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent 
end 

,然後家長的看法/ new.html.erb

<%= form_for @parent, url: parents_path(@parent), method: :post do |f| %> 
    // basic fields for parent 
    <%= f.fields_for :child do |ff| %> 
    <%= ff.title %> 
    <% end %> 
<% end %> 

工作正常,但如果我想要做的事,如:

<%= form_for @parent, url: parents_path(@parent), method: :post do |f| %> 
    // basic fields for parent 
    <%= f.fields_for :child do |ff| %> 
    <%= ff.title %> 
    <% end %> 
    <%= f.fields_for :child do |ff| %> 
    <%= ff.title %> 
    <% end %> 
<% end %> 

它只填充最後一個fields_for條目的參數。創建允許實例化嵌套屬性的多個實例的表單的正確方法是什麼?

回答

-1

一個更好的辦法來做到這一點會在你的控制器動作:

def new 
    @parent = Parent.find(1) 

    # Build 2 children 
    2.times do 
    @parent.children.build 
    end 
end 
在你看來

然後:

<%= form_for @parent, url: parents_path(@parent), method: :post do |f| %> 
    // basic fields for parent 
    <%= f.fields_for :children do |ff| %> 
    <%= ff.title %> 
    <% end %> 
<% end %> 

更新:

沒有真正回答的問題但建議基於Rails約定進行一些更改。由於"child".pluralize返回兒童,我認爲該模型應更新爲使用has_many :children,所以類名將被正確解決"child".pluralize.classify

class Parent < ActiveRecord::Base 
    has_many :children 
    acceptes_nested_attributes_for :children 
end 

和相應變化的觀點:

<%= form_for @parent, url: parents_path(@parent), method: :post do |f| %> 
    // basic fields for parent 
    <%= f.fields_for :children do |ff| %> 
    <%= ff.title %> 
    <% end %> 
<% end %> 
+0

我知道我能做到這一點,但希望一些方法來提供通過形式的原始建設這個功能。這樣用戶可以決定他們想要創建多少個孩子的實例。 –

+0

@DanielNill,用戶如何決定?你將如何處理?我做過類似設計的一種方法是使用ajax,用戶可以點擊一個「添加」按鈕,在視圖中添加一個新的「子」記錄。你能否稍微解釋一下你期望實施什麼類型的設計? – vee

+0

用戶將通過使用本質上描述的內容來進行描述,但應該不需要進行ajax調用。除非你正在編輯一個現有的父母,否則應該不需要事先構建它的孩子,除了約定表單期望的內容。只要在用戶的請求處追加新元素到表單上,然後在控制器的create方法中構建屬性散列就會容易得多。我只是希望有一個軌道公約來解決這個問題。聽起來好像沒有。 :( –

相關問題