我正在创建一个rails配方应用程序,当用户创建新配方时,他们必须添加配料。我在数据库中有一个食物表(有关食物的其他属性意味着我需要另一张桌子)。它需要是一个多对多的关系,因为食谱有多种成分,但食物可以有多种食谱。我创建了一个表,recipes_ingredients,以帮助这个多对多的关系。我遇到的问题是新配方的形式。用户应该只能使用食物表中的食物。我想做谷歌在搜索上做的下拉选项。这是我能想到的最佳方式。你们有没有想法如何做到这一点?您对如何在配方中添加配料有其他想法吗?
我正在使用rails 4.1和ruby 2.1。我在Ubuntu 12.04上。
答案 0 :(得分:0)
您可以使用partial来添加成分(从成分表中取出成分并将其存储在recipes_ingredients表中)。
在食谱表格中添加部分渲染
<%= f.fields_for :recipesingredients do |ff| %>
<ol>
<table id = "tabla">
<tr>
<td style = "padding-left: 8px"><%= render 'recipesingredients_fields', :f => ff %></td>
</tr>
</table>
</ol>
<% end %>
<div id = "ingredientsadd"></div>
<%= link_to_add_association 'Add', f, :recipesingredients, 'data-association-insertion-node' => "#ingredientsadd", 'data-association-insertion-method' => "append" %>
然后,在该部分内部,您可以添加要添加到recipes_ingredients表的字段。在这种情况下,我假设您只需要ingredient_id。在这种情况下,您将使用options_from_collection标记,该标记将填充当前存储在成分表中的值。
<%= f.select :ingredient_id , options_from_collection_for_select(@ingredients, :id, :name)%>
请记住,您的recipes_ingredients需要有recipe_id和ingredient_id字段。此外,配料必须属于配方,食谱必须具有多种成分。
希望这有帮助!