我有一个用户模型和一个订单模型。有两种类型的用户:卖家和司机。卖家和司机都有很多订单,每个订单属于一个卖家和一个司机。因此,我希望能够查询user.orders
并让它返回特定用户的订单,还能成功查询order.seller
和order.driver
。我如何建立这些关系?
答案 0 :(得分:0)
似乎没有明确的方法让2个关系在另一个模型上共享一个字段。你总是可以做这样的事情,如果你有一个区分司机和卖家的领域,如果它们是混合的,那么它就不会起作用。
<强> User.rb 强>
has_and_belongs_to_many :orders
<强> Order.rd 强>
has_and_belongs_to_many :users
def seller
users.where(job: User.DRIVER)
end
<强> User.rb 强>
has_many :sales, class_name: 'Order', inverse_of: :seller
has_many :pickups, class_name: 'Order', inverse_of: :driver
def orders
Order.or(seller_id: self.id, driver_id: self.id)
end
<强> Order.rb 强>
belongs_to :seller, class_name: 'Order', inverse_of: :sales
belongs_to :driver, class_name: 'Order', inverse_of: :pickups
答案 1 :(得分:0)
这就是我想出来的......非常确定它是按预期工作的。
Class User
has_many :sales, class_name: 'Order', inverse_of: :seller
has_many :pickups, class_name: 'Order', inverse_of: :driver
end
Class Order
belongs_to :seller, class_name: "User", inverse_of: :sale
belongs_to :driver, class_name: "User", inverse_of: :pickup
end