如何使用Rails中的现有数据预填充嵌套字段?

问题描述:

我有许多成分的收据模型。所以,我用如何使用Rails中的现有数据预填充嵌套字段?

gem "nested_form" 
gem "cocoon" 

嵌套形式。一切都很好,同时创造一种新的成分(或几种成分)。但是我想在编辑时用现有数据预先填充这些字段。

_form.html.slim

= f.fields_for :ingredients, [@receipt.ingredients.build] do |i| 
    = render 'ingredient_fields', f: i 
    = link_to_add_association 'Add ingredient', f, :ingredients, class: "btn btn-success" 
    br/ 

_ingredient_fields.html.slim

.nested-fields 
    .row 
    .form-group.col-xs-5 
     .field   
     = f.text_field :name, placeholder: "Name", class: "form-control" 
    .form-group.col-xs-3 
     .field 
     = f.number_field :count, placeholder: "Count", class: "form-control" 
    .form-group.col-xs-3  
     .field 
     = f.select :count_name, [['gr', 'gr'], ['kg', 'kg']], placeholder: "count name", class: "form-control" 
    = link_to_remove_association image_tag("/close.png"), f 

这是收据控制器的一部分

def edit 
    @ingredients = @receipt.ingredients 
end 
+0

你可以发布你的ingredients_controller?您通常会在编辑操作中执行'@ingredient = Ingredient.find(params [:id])''。这将找到与编辑的ID – ThorTL67

+0

@ ThorTL67相关的所有成分和成分字段,但它是收据控制器。 –

在你的表格你应该写:

= f.fields_for :ingredients do |i| 

这将迭代现有的收据成分。如果你仍然想在默认情况下添加新的成分创建一个新的收据时,你可以做到这一点最简单的为您的receipts_controller如下:

def new 
    @receipt = Receipt.new 
    @receipt.ingredients.build 
end