这是我的问题的后续跟进:Rails 4 - Access Join Table Value in views
现在我知道如何检索连接表属性并在视图中显示它们。但我仍然无法找到正确的方法来编辑和更新属性。
型号:
class Recipe < ActiveRecord::Base
has_many :recipe_ingredients
has_many :ingredients, through: :recipe_ingredients
end
class Ingredient < ActiveRecord::Base
has_many :recipe_ingredients
has_many :recipes, through: :recipe_ingredients
end
class RecipeIngredient < ActiveRecord::Base
belongs_to :recipe
belongs_to :ingredient
#there is an attribute t.text :amount
end
配方#编辑:
...
<%= simple_form_for @recipe do |f| %>
<div class="form-group">
<%= f.input :name, input_html: { class: "form-control"} %>
<%= f.input :description, input_html: { class: "form-control"} %>
<%= f.collection_select(:ingredient_ids, Ingredient.all, :id, :title, {}, {multiple: true}) %>
<!-- reserve for recipe_ingredients.amount -->
</div>
<%= f.submit "Submit", disable_with: 'Submitting...', class: "btn btn-primary"%>
<% end %>
...
如上所示,这是一种多对多关系,每种食谱可能有几种成分。它工作正常,我可以选择合适的模型(使用collection_select)。但是我已经完成了编辑和更新连接表属性的工作。我脑子里有两个想法:
我知道这个问题似乎微不足道,但许多解决方案都已过时(Rails 3)。渴望获得Rails 4解决方案。
修改
意图:我想自己创建食谱和成分模型,这样就完成了。用户将看到使用成分#show动作中的成分的哪个配方,这也是完成的。对于Recipe #show action,有一点点差异,用户将看到它正在使用的成分以及数量(连接表属性),这是在我之前的问题中完成的。最后一个问题是,我想让这个属性可编辑。
答案 0 :(得分:0)
您可能希望研究与cocoon gem结合使用的嵌套模型。这将允许您拥有一次更新多个模型的表单,它会为您处理所有ajax。 https://github.com/nathanvda/cocoon。我在一个系统上使用了这个gem,用户需要通过动态表单字段为一个琐事问题添加一个或多个答案。我认为它也适用于你,让用户能够为配方添加一个或多个RecipeIngredient关系。您可以通过包含带有成分模型记录的选择的Cocoon动态地向表单添加选择。