2013-07-10 157 views
3

嗨,我是使用嵌套表格插件,並試圖使其成爲軌道4,而不是軌工作3.基本上我的模式是這樣的:軌道4嵌套形式問題

has_many :item, :dependent => :destroy 

accepts_nested_attributes_for :item, :reject_if => lambda { |a| a[:item].blank? }, :allow_destroy => true 

和我的觀點看起來像這樣的:

<%= nested_form_for(@store) do |f| %> 
    <%= f.fields_for :item do |item_form| %> 
    <%= item_form.text_field :name %> 
    <%= item_form.link_to_remove "Remove this item" %> 
    <% end %> 
<% end %> 

這工作(在呈現的方式 - 你可以添加和刪除字段一樣,你應該能),但不保存該項目的名稱。

我在控制器嘗試這個(這些都是受保護的屬性/ PARAMS):

def store_params 
    params.require(:store).permit(:name, :owner, :description,:url, :user, item_attributes) 
end 

,但它仍然有出現:

Unpermitted parameters: item_attributes 

感謝所有幫助!

+0

您可能還必須允許項目的字段。 – 1andsock

+0

我不確定這是否與您的問題有關,但nested_form gem並未明確支持Rails 4. – depa

+0

嘗試[cocoon](https://github.com/nathanvda/cocoon)gem來代替。似乎是使用Rails 4.0的好方法,因爲它更新一些。 – mjnissim

回答

5

您將不得不允許項目(如姓名)的字段也被允許。

那麼試試這個:

def store_params 
    params.require(:store).permit(:name, :owner, :description,:url, :user, item_attributes: [:name]) 
end 
+0

非常感謝! –

5

有時你必須指定:ID是這樣的:在類似的情況下,我上週已經

def store_params 
    params.require(:store).permit(:name, :owner, :description,:url, :user, item_attributes: [:id, :name]) 
end 

,不指定:ID發的Rails 4創建一個新的實體,而不是更新現有的實體。

+2

這個。添加:id修正了它,以便在每次提交時我都不會乘以列表。我還必須添加:_destroy,如果我想我的嵌套窗體正確刪除。 我不知道是否有某種方法來白名單整個_attributes而不訴諸許可證! –