2013-03-18 52 views
1

我有一個嵌套的形式,並在另一個。基本上我所擁有的是一大堆配料,對於每種配料,我都有一個數量和單位,它存儲在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); 
}) 

回答

1

表單助手檢查模型之間的關係以找出如何提交參數。您是否在Ingredient模型中包含accepts_nested_attributes_for :entry_ingredients

+0

啊你是對的,我在入口模型中有'accep_nested_attributes_for:entry_ingredients'。 woops – GiH 2013-03-18 16:48:44