Rails 5:带迭代的数据库设计

Rails 5: Database design with iterations

我目前有一个包含用户、膳食和订单的站点 tables。

我目前正在使用迭代显示膳食:

<% @meals.each do |meal| %>
 <%= image_tag(meal.img,  alt: meal.name) %>
 <span class="mealname"><%= meal.name %></span>
 <p><%= meal.description %><p>

   <div class="qty">
       INPUT FOR ORDER QTYS HERE
   </div>

<% end %>

订单迁移参考:

  t.belongs_to :user
  t.integer :total_meals, null: false, default:"0"
  t.integer :meal1, null: false, default: "0"
  t.integer :meal2, null: false, default: "0"
  etc..

之前我没有使用迭代,而是让相应的 meal1、meal2 等与 HTML 布局中的膳食相匹配。

这显然可以做得更好,但是考虑到我需要能够动态更新膳食信息(我想使用上面的迭代),我应该如何处理这个问题?

而且...如果我使用另一个 table,我如何才能将其实现到迭代中并正确填充?

我可以在 Meals table 中添加一个 'qty' 列并使其成为 belong_to :user,但这显然也是不好的做法,很快就会变得非常混乱。

如果你想存储这样的信息:

Order has meal 1, meal 2 and meal 3 and order belongs to User 1

那你应该对这3个模型有正确的联想。 UserMealOrder

一个Order可以分很多餐,一个Meal可以分很多单,所以OrderMeal会有many-to-many association.

一个Orderbelong to一个User

解法:

将您的 Order 模型更改为:

t.belongs_to :user

添加第四个模型,你可以命名为Quantity:

t.belongs_to :order
t.belongs_to :meal
t.integer :quantity

现在假设用户 A 选择 2 份餐点 A、3 份餐点 B,您将为该用户创建订单 A,订单 A 将在 Quantity 模型中包含两个条目膳食编号的信息及其各自的数量。

更新: 模型将如下所示:

Order.rb

belongs_to :user
has_many :quantities
has_many :meals, through: :quantities

Quantity.rb

belongs_to :order
belongs_to :meal

Meal.rb

has_many :quantities
has_many :orders, through: :quantities

User.rb

has_many :orders

那么,如果你想获取一顿饭的总订单数,可以通过以下方式获取:

meal.orders.count

如果您想获取一份订单的所有餐食及其数量:

order.quantities.each do |record|
  record.meal.name # for name of associated meal
  record.quantity # for quantity of meal
end