加入表数量

时间:2015-08-01 22:53:08

标签: ruby-on-rails forms formtastic jointable

我正在学习构建订购系统的Rails,并且我试图为订单构建表单。我的模型看起来像这样:

class Restaurant < ActiveRecord::Base
    has_many :orders
end

class Order < ActiveRecord::Base
    belongs_to :restaurant
    has_many :order_recipes, dependent: :destroy
    has_many :recipes, through: :order_recipes
end

class Recipe < ActiveRecord::Base
    belongs_to :restaurant
    has_many :order_recipes
    has_many :orders, through: :order_recipes
end

我曾经使用复选框处理食谱的输入,这只允许我添加每个食谱中的一个:

<%= form_for([@restaurant, @order]) do |f| %>
        <%= f.label :Table_Number %>
        <%= f.number_field :table_id %>

        <strong>Recipes: </strong>
        <br>
        <%= f.collection_check_boxes :recipe_ids, @recipes, :id, :name do |cb| %>
            <% cb.label(class: "checkbox-inline input_checkbox") {cb.check_box(class: "checkbox") + cb.text} %>
        <% end %>
        <%= f.collection_select(:recipe_ids, @recipes, :id, :name) %>
        <%= f.submit(@order.new_record? ? "Create Order" : "Edit Order", class: "btn btn-success") %>
<% end %>

但现在我还需要处理数量。所以我添加了&#34;数量&#34;列到order_recipes表。而且我无法弄清楚如何构建适当的表单以便能够提交Order对象,其中order_recipe对象数组每行包含[recipe_id,order_id,quantity]。我也开始使用formtastic,如果它让事情变得更容易,虽然我还不是很好。

1 个答案:

答案 0 :(得分:2)

ETA :由于quantity字段位于orders_recipes表格,因此您需要创建一个@orders_recipes对象,其中包含所有正确的recipe_id {1}}而是:

@orders_recipes = @recipes.map{|r| @order.order_recipes.build(recipe: r)}

然后您可以使用FormHelper的fields_for方法:

<%= f.fields_for :order_recipes, @order_recipes do |orf| %>
  <%= orf.hidden_field :recipe_id %>
  Quantity: <%= orf.number_field :quantity %>
<%- end -%>

如果需要,您需要手动&#34;移除nil的{​​{1}}或0值的order_recipes。

为此,您需要在模型中使用quantity,如下所示:

accepts_nested_attributes_for