Rails 4 - 使用has_many更新连接表属性

时间:2015-08-19 12:20:38

标签: ruby-on-rails-4 has-many-through jointable

这是我的问题的后续跟进: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)。但是我已经完成了编辑和更新连接表属性的工作。我脑子里有两个想法:

  1. 制作另一个编辑页面以编辑连接模型属性
  2. 的Ajax?但不太熟悉
  3. 我知道这个问题似乎微不足道,但许多解决方案都已过时(Rails 3)。渴望获得Rails 4解决方案。

    修改

    意图:我想自己创建食谱和成分模型,这样就完成了。用户将看到使用成分#show动作中的成分的哪个配方,这也是完成的。对于Recipe #show action,有一点点差异,用户将看到它正在使用的成分以及数量(连接表属性),这是在我之前的问题中完成的。最后一个问题是,我想让这个属性可编辑。

1 个答案:

答案 0 :(得分:0)

您可能希望研究与cocoon gem结合使用的嵌套模型。这将允许您拥有一次更新多个模型的表单,它会为您处理所有ajax。 https://github.com/nathanvda/cocoon。我在一个系统上使用了这个gem,用户需要通过动态表单字段为一个琐事问题添加一个或多个答案。我认为它也适用于你,让用户能够为配方添加一个或多个RecipeIngredient关系。您可以通过包含带有成分模型记录的选择的Cocoon动态地向表单添加选择。