我有一個嵌套的形式,並在另一個。基本上我所擁有的是一大堆配料,對於每種配料,我都有一個數量和單位,它存儲在Entry和Ingredient之間的一個名爲EntryIngredient的關聯表中。隨着我的以下JS,我能夠添加動態字段,但是當我提交時,我得到AssociationTypeMismatch錯誤。不知道爲什麼,參數看起來不錯("ingredients_attributes"=>{"0"=>{"name"=>"Salt", "entry_ingredients"=>{"quantity"=>"2.5", "unit"=>"tbspns"}, "_destroy"=>""}}}}
),我錯過了什麼?其實,我想這可能是因爲它發送爲entry_ingredients
而不是entry_ingredients_attributes
,但我沒有看到我在第二個嵌套窗體中做了什麼不同。下面是對配料領域的第一種形式:AssociationTypeMismatch:期待一個模型,但有一個數組? Rails 3嵌套表格
<div id="ingredients">
<p>Ingredient List:</p>
<%= f.fields_for :ingredients, @entry.ingredients.build do |builder| %>
<%= render 'ingredient_fields', :f => builder %>
<% end %>
</div>
<div id='add_ingredient'>Add Ingredient</div>
<div class="actions">
<%= f.submit %>
這裏是entry_ingredients代碼:
<ul id="ingredient_list">
<li>
<%= f.label :name %>
<%= f.text_field :name, :class => "ingredient_field" %>
<%= f.hidden_field :_destroy, :class => "delete_ingredient" %>
<%= f.fields_for :entry_ingredients, @entry.entry_ingredients.build do |builder| %>
<%= render 'entry_ingredient_fields', :f => builder %>
<% end %>
<%= link_to "Remove", "#", :class => "remove_fields" %>
</li>
</ul>
和我的繼承人JS動態地添加新成分:
$('form').on('click', '#add_ingredient', function(){
count = $('#ingredient_list li').length;
field = $('#ingredient_list li').first()
.clone() //clone the first element in the list
.find('input') //find all its inputs
.val('') //set all input values to blank
.end()
.find($('.ingredient_field'))
.prop({id: 'entry_ingredients_attributes_' + count + '_name', name: 'entry[ingredients_attributes][' + count +'][name]' })
.end()
.find($('.delete_ingredient'))
.prop({id: 'entry_ingredients_attributes_' + count + '__destroy', name: 'entry[ingredients_attributes][' + count +'][_destroy]', value: 'false' })
.end()
.find($('.ingredient_quantity'))
.prop({id: 'entry_ingredients_attributes_' + count + '_entry_ingredients_quantity', name: 'entry[ingredients_attributes][' + count +'][entry_ingredients][quantity]'})
.end()
.find($('.ingredient_unit'))
.prop({id: 'entry_ingredients_attributes_' + count + '_entry_ingredients_unit', name: 'entry[ingredients_attributes][' + count +'][entry_ingredients][unit]'})
.end();
$('#ingredient_list').append(field);
})
啊你是對的,我在入口模型中有'accep_nested_attributes_for:entry_ingredients'。 woops – GiH 2013-03-18 16:48:44