我有一个像这样的数据库:
class Store
hasMany :items
class Item
belongsTo :store
class Order
hasMany :items, :through => :order_items
class OrderItem
belongsTo :order
首先,这是设置此数据库的正确方法吗?
最后,如何使用多个项目正确创建记录?
例如
o = Order.new
Order.items = [ [0,1], [3,4] ] # do you add them as an array? [order_id, item_id] ?
我是否正确地走上正轨?
谢谢!
答案 0 :(得分:2)
我认为你应该从这里开始:association basics。与许多其他框架不同,Rails具有很好的文档。它非常容易消化并且非常有意义。另外,建议阅读一本好的Rails 3入门书。
要回答您的问题,上面的示例存在一些问题。对于初学者来说,它是has_many
和belongs_to
,而不是hasMany
和belongsTo
。就你的建模而言,你很接近,尽管我会反对你当前的结构。
我反对的原因是因为订单应该是一个记录项目的快照,就像它在给定实例上一样。现在,如果您对项目进行版本控制,那么您的架构完全正常。如果不这样做,那么您需要确保在订购时记录有关产品的相关信息,并且只有最小用途的项目参考。
要回答结构化问题,按照现在设计的方式,以下是您对其进行建模的方法:
class Store < ActiveRecord::Base
has_many :items
end
class Item < ActiveRecord::Base
belongs_to :store
has_many :order_items
end
class Order < ActiveRecord::Base
has_many :order_items
has_many :items, :through => :order_items
end
class OrderItem < ActiveRecord::Base
belongs_to :order
belongs_to :item
end
转到下一个问题:
最后,如何使用多个项目正确创建记录?
@order.items << item #where item is the instance of the item you want to add