2013-03-18 1 views
1

중첩 된 양식이 있고 그 안에 다른 양식이 있습니다. 기본적으로 내가 가지고있는 것은 많은 성분과 각 성분에 대해 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); 
}) 
여기 성분에 대한 필드가있는 첫 번째 형태는

답변

1

양식 도우미는 모델 간의 관계를 검사하여 매개 변수를 제출하는 방법을 찾습니다. Ingredient 모델에 accepts_nested_attributes_for :entry_ingredients을 포함 시켰습니까?

+0

아, 네가 맞아, 나는 엔트리 모델에'accepts_nested_attributes_for : entry_ingredients'를 가지고 있었다. 비틀기 – GiH

관련 문제