0

我试图实现check_box_tag来存储具有配料的冰箱模型对象;这两个模型通过一个有许多关系(FridgeIngredient模型)进行关联。值得注意的是,每个冰箱也属于一个用户,我担心这可能会以某种方式导致问题(因为这是我以前从此代码为我工作的唯一区别)。包括check_box_tag在内的表单 - params不会更新具有多对多关系

我已经为之前的多对一关系构建了一个成功的复选框列表,虽然在这种情况下它不起作用。下面的表格代码(适用于这些模型)是什么别的地方工作,但现在没有更新的冰箱:

<%= form_for(@fridge) do |f| %> 

    <!-- a debug column for testing --> 
    <%= f.label :debug %> 
    <%= f.text_field :debug 

    <!-- the checkboxes --> 
    <h2>Add ingredients to your Fridge</h2> 
     <div> 
      <% hidden_field_tag "fridge[ingredient_ids][]", nil %> 
      <% Ingredient.all.each do |ingredient| %> 
      <%= check_box_tag "fridge[ingredient_ids][]", ingredient.id, 
       @fridge.ingredient_ids.include?(ingredient.id), id: dom_id(ingredient) %> 
      <%= label_tag dom_id(ingredient), ingredient.name %><br> 
      <% end %> 
     </div> 
     <%= f.submit "Update" %> 
<% end %> 

这提供什么样子对我来说,正确的参数,可以和“调试”字段更新,因为它应该:

fridge: !ruby/hash:ActionController::Parameters 
     debug: '' 
     ingredient_ids: 
     - '1' 
     - '2' 
    commit: Update 
    controller: fridges 
    action: update 
    id: '2' 

难道是@fridge变量不正确?当我测试它时,它似乎拿起冰箱的正确实例。目前,它是:

@fridge = current_user.fridge #using my auth method, and unavailable to 

但是,当表单提交这个项目时,没有成分添加到冰箱。该has-many-through正在运行,并且可以在Rails控制台中添加和访问配料。

最后,值得注意的是,通过控制台添加的冰箱中存在的任何成分的复选框会被选中(即,如果我通过控制台向冰箱添加牛排,则会在页面上的复选框列表中进行检查) 。

感谢您的帮助!

回答

1

找到解决方案 - 参数没有通过。在控制器中配置了强参数,它很好用:

def fridge_params 
    params.require(:fridge).permit(:debug, { :ingredient_ids => [] }) 
end