중첩 된 양식이 있고 그 안에 다른 양식이 있습니다. 기본적으로 내가 가지고있는 것은 많은 성분과 각 성분에 대해 Entry와 EntryIngredient라고하는 성분 사이의 연관 테이블에 저장된 수량과 단위를 가지고 있습니다. 다음 JS에서는 동적 필드를 추가 할 수 있지만 제출할 때 AssociationTypeMismatch 오류가 발생합니다. 왜 매개 변수가 나에게 좋을지 모르겠지만 ("ingredients_attributes"=>{"0"=>{"name"=>"Salt", "entry_ingredients"=>{"quantity"=>"2.5", "unit"=>"tbspns"}, "_destroy"=>""}}}}
), 나는 무엇을 놓치고 있습니까? 실제로, 그 이유는 entry_ingredients_attributes
대신에 entry_ingredients
을 전송했기 때문일 수도 있지만, 두 번째 중첩 된 양식에서 다르게 수행 한 것을 볼 수 없습니다. 여기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>
과를 heres 내 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);
})
여기 성분에 대한 필드가있는 첫 번째 형태는
아, 네가 맞아, 나는 엔트리 모델에'accepts_nested_attributes_for : entry_ingredients'를 가지고 있었다. 비틀기 – GiH