Rails - 表单访问db表中的项目

时间:2014-04-16 20:08:37

标签: ruby-on-rails database forms many-to-many

我正在创建一个rails配方应用程序,当用户创建新配方时,他们必须添加配料。我在数据库中有一个食物表(有关食物的其他属性意味着我需要另一张桌子)。它需要是一个多对多的关系,因为食谱有多种成分,但食物可以有多种食谱。我创建了一个表,recipes_ingredients,以帮助这个多对多的关系。我遇到的问题是新配方的形式。用户应该只能使用食物表中的食物。我想做谷歌在搜索上做的下拉选项。这是我能想到的最佳方式。你们有没有想法如何做到这一点?您对如何在配方中添加配料有其他想法吗?

我正在使用rails 4.1和ruby 2.1。我在Ubuntu 12.04上。

1 个答案:

答案 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字段。此外,配料必须属于配方,食谱必须具有多种成分。

希望这有帮助!