我正在Rails中建立食物配方数据库,我正在尝试使用Jquery构建一个方便的形式来添加成分。
我的协会:
class Recipe < ActiveRecord::Base
has_many :recipe_ingredients
has_many :ingredients, :through => :recipe_ingredients
accepts_nested_attributes_for :recipe_ingredients
end
class Ingredient < ActiveRecord::Base
end
class RecipeIngredient < ActiveRecord::Base
belongs_to :recipe
belongs_to :ingredient
end
我的食谱表格看起来像这样(简化):
<%= simple_form_form(@recipe) do |f| %>
<div class="form-inputs">
<%= f.input :name %>
<fieldset><legend>Ingredients</legend>
<table class="table">
<% @recipe.recipe_ingredients.each do |recipe_ingredient| %>
<tr>
<%= f.fields_for :recipe_ingredients, recipe_ingredient do |dif| %>
<td><%= dif.text_field :ingredient %></td>
<td><%= dif.text_field :amount %></td>
<% end %>
</tr>
<% end %>
</table>
<div class="btn-group">
<a href="#" class="btn btn-primary">Add New Ingredient</a>
</div>
</fieldset>
</div>
<% end %>
两个问题:
我的.each块看起来是否正确关联?
向表的客户端添加新行的最佳方法是什么,以便表单帮助程序识别新行并创建适当的数据库插入?我不太清楚Rails魔法如何在创建像这样的对象数组方面起作用。
答案 0 :(得分:1)
看起来像Ryan Bate的nested_form是要走的路,它也支持simple_form
基本用法:
<%= simple_nested_form_for @recipe do |f| %>
然后,您希望“添加新成分”链接出现在哪里:
<%= f.link_to_add "Add new ingredient", :recipe_ingredients %>
宝石本身有很好的文档,也检查维基页面。