所以我有3个模型:Order,Item和User。
User
has_many :items
Order
has_many :items
Item
belongs_to :user
belongs_to :order
我的问题是:我还想关联User和Order模型(比如有一个关联:Order:belongs_to:user,User has_many:orders)。我想在Order模型中创建一个包含以下内容的新列:user_id。但这是不正确的,因为一个项目已经与用户有关联?是否有一种奇特的关系可以让我得到我需要的东西,而无需在数据库中添加额外的user_id字段?
我可以在技术上说:
User
has_many :orders, :through => :items
Order
has_many :users, :through => :items
但这对我来说就像是黑客。为了让用户与订单相关联,我不得不说order.users.first(订单has_many:items,但所有商品只有一个用户)
另外顺便说一下,我无法摆脱Item与用户的关联,因为有一段时间创建了Item并且没有与Order关联。
答案 0 :(得分:1)
如果你保持两种关联,你会长期陷入困境。我认为你最好现在正确设置并使用rake任务将旧数据与新模式相符合。
因此设置User -> Order -> Item
以继续前进,然后创建一个rake任务来更新数据库:
现在您的架构已正确设置,并且所有旧版数据都已迁移到新格式。最重要的是,你不会试图遵守传统格式。
对于伪代码抱歉,但我今天病了。 :)