我试图实现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控制台中添加和访问配料。
最后,值得注意的是,通过控制台添加的冰箱中存在的任何成分的复选框会被选中(即,如果我通过控制台向冰箱添加牛排,则会在页面上的复选框列表中进行检查) 。
感谢您的帮助!