【发布时间】:2014-06-06 03:17:22
【问题描述】:
我想使用订单表格将下表中的值存储在:quantity 中,但我不知道如何为这个特定的表执行此操作。
create_table "order_items", force: true do |t|
t.integer "item_id"
t.integer "order_id"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "quantity"
t.decimal "price"
end
关系如下
订购型号
has_many :order_items
has_many :items, :through => :order_items
项目模型
has_many :order_items
has_many :orders, :through => :order_items
OrderItem 模型
belongs_to :item
belongs_to :order
【问题讨论】:
-
你看过嵌套表单吗?
-
与您的问题无关,但觉得我应该指出您的逻辑中的一个巨大(和常见)缺陷。 items 应该纯粹用作查找,而不是与订单直接相关。您应该将所选项目数据“复制”到 order_item 记录,而不是将项目关联到 order_item。这允许您更新项目数据,并且可以选择而不是强制将更新应用于历史完成的订单。
-
@jamesw 你这是什么意思?我可以看到这是如何工作的,并且不会影响项目,除了参考?
-
如果项目记录上的任何细节发生变化,该变化将反映在以前购买的所有项目上,这是错误的。如果您查看 2 年前购买的订单商品,您需要查看当时该商品的描述和措辞,而不是现在的说明。因此,在购买时将查找数据“复制”到 order_item 是一种很好的做法,并且确实是某些组织的要求,而且还提供了审计跟踪。
-
@jamesw,很好的见解,我会进行修改
标签: ruby-on-rails ruby-on-rails-4 associations simple-form