Ruby on rails Rails 5:具有迭代的数据库设计

Ruby on rails Rails 5:具有迭代的数据库设计,ruby-on-rails,database-design,relational-database,Ruby On Rails,Database Design,Relational Database,我目前有一个网站,上面有用户、用餐和订单表 用户表保存用户信息 膳食表包含膳食名称、说明、img(url) 我目前正在使用迭代显示膳食: <% @meals.each do |meal| %> <%= image_tag(meal.img, alt: meal.name) %> <span class="mealname"><%= meal.name %></span> <p><%= meal.descri

我目前有一个网站,上面有用户、用餐和订单表

  • 用户表保存用户信息
  • 膳食表包含膳食名称、说明、img(url)
我目前正在使用迭代显示膳食:

<% @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 %>
在此之前,我没有使用迭代,而是让各自的meal1、meal2等与HTML布局中的膳食相匹配

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

而且。。。如果我使用另一个表,我将如何在迭代中实现它并正确填充


我可以在用餐表中添加一个“qty”列,使其属于:user,但这显然也是一种不好的做法,很快就会变得非常混乱。

如果您想存储以下信息:

订单包括第1餐、第2餐和第3餐,订单属于用户1

那么你应该在这三个模型中有正确的关联<代码>用户,
用餐
订单

一个
订单
可以有很多餐,一个
可以属于多个订单,因此
订单
将有
多对多关联

订单
属于
a
用户

解决方案:

将您的
订单
型号更改为:

t.belongs_to :user
添加第四个型号,您可以将其命名为
数量

t.belongs_to :order
t.belongs_to :meal
t.integer :quantity
现在让我们假设用户A,选择2个单位的A餐,3个单位的B餐,您将为该用户创建一个订单A,订单A将在
数量
模型中有两个条目,包含餐id信息及其各自的数量

更新: 模型将如下所示:

Order.rb

belongs_to :user
has_many :quantities
has_many :meals, through: :quantities
数量.rb

belongs_to :order
belongs_to :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

在orders表中,您只需要用餐总数,或者您还需要膳食信息。膳食信息是全局的,每个用户都将看到相同的膳食。用户只能更改每顿饭的数量(这是orders表的当前用途)。多对多关系现在更有意义了。那么,对于在同一次迭代中显示用餐信息和数量,我是否会以某种方式引入该数量字段,并保持迭代不变?通过快速参考rails指南和您的帮助,我现在完全理解了:through的用法,我现在意识到它在这些类型的关系中是至关重要的。我以前认为这是不可能的。非常感谢。
order.quantities.each do |record|
  record.meal.name # for name of associated meal
  record.quantity # for quantity of meal
end