加入Table个数量
Join Table Quantity
我正在学习 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 %>
但现在我还需要处理数量。所以我将 "quantity" 列添加到 order_recipes table。而且我无法弄清楚如何构建正确的表单来提交一个 Order 对象,每个对象的 order_recipe 数组包含 [recipe_id, order_id, quantity] 每行.如果 formtastic 能让事情变得更简单,我也愿意使用它,尽管我还不是很擅长。
ETA: 由于 quantity
字段位于 orders_recipes
table,您需要创建一个 @orders_recipes
对象与所有正确的 recipe_id
s 相反:
@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 -%>
如果需要,您需要 "manually" 删除 order_recipes 和 nil
或 0
值 quantity
。
为此,您需要在模型中添加一个 accepts_nested_attributes_for
,如下所示:
class Order < ActiveRecord::Base
…
accepts_nested_attributes_for :order_recipes
end
我正在学习 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 %>
但现在我还需要处理数量。所以我将 "quantity" 列添加到 order_recipes table。而且我无法弄清楚如何构建正确的表单来提交一个 Order 对象,每个对象的 order_recipe 数组包含 [recipe_id, order_id, quantity] 每行.如果 formtastic 能让事情变得更简单,我也愿意使用它,尽管我还不是很擅长。
ETA: 由于 quantity
字段位于 orders_recipes
table,您需要创建一个 @orders_recipes
对象与所有正确的 recipe_id
s 相反:
@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 -%>
如果需要,您需要 "manually" 删除 order_recipes 和 nil
或 0
值 quantity
。
为此,您需要在模型中添加一个 accepts_nested_attributes_for
,如下所示:
class Order < ActiveRecord::Base
…
accepts_nested_attributes_for :order_recipes
end