包含 check_box_tag 的表单 -- 参数不更新具有多次通过关系

Form including check_box_tag -- params not updating a has-many-through relationship

我正在尝试实现一个 check_box_tag 来储存带有成分的冰箱模型对象;这两个模型通过具有多次关联的关系(FridgeIngredient 模型)链接在一起。值得注意的是,每个 Fridge 也属于一个用户,我担心这可能会以某种方式引起这里的问题(因为这是我从这段代码之前为我工作的地方可以看到的唯一区别)。

我之前已经成功地为一个多次通过的关系建立了一个复选框列表,虽然它在这个场合不起作用。以下表单代码(适用于这些模型)在其他地方有效,但现在无法更新冰箱:

<%= 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 %>

这提供了在我看来正确的参数,并且 'Debug' 字段按应有的方式更新:

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

会不会是@fridge变量不对?当我测试它时,它似乎确实选择了正确的 Fridge 实例。目前是:

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

但是,当提交此项目的表单时,冰箱中未添加任何成分。 has-many-through 正在正常工作,可以在 Rails 控制台中添加和访问成分。

最后,值得注意的是,复选框选择了通过控制台添加的冰箱中现有的任何成分(即,如果我通过控制台将牛排添加到冰箱,这将在页面上的复选框列表中选中).

感谢您的帮助!

找到解决方案 - 参数未被清除以通过。在控制器中配置了强大的参数,一切顺利:

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