mongoid 模型与另一个模型有两种关系 - rails mongodb
mongoid model has two relations with another model - rails mongodb
我有一个用户模型和一个订单模型。有两种类型的用户:卖家和driver。卖家和driver都有很多订单,每个订单属于一个卖家和一个driver。因此,我希望能够查询 user.orders
并使其成为 return 特定用户的订单,而且还能成功查询 order.seller
和 order.driver
。我怎样才能建立这些关系?
似乎没有明确的方法让两个关系在另一个模型上共享一个字段。如果你有一个区分司机和卖家的字段,你总是可以做这样的事情,如果他们是混合的,那是行不通的。
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
这就是我想出的..很确定它按预期工作。
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
我有一个用户模型和一个订单模型。有两种类型的用户:卖家和driver。卖家和driver都有很多订单,每个订单属于一个卖家和一个driver。因此,我希望能够查询 user.orders
并使其成为 return 特定用户的订单,而且还能成功查询 order.seller
和 order.driver
。我怎样才能建立这些关系?
似乎没有明确的方法让两个关系在另一个模型上共享一个字段。如果你有一个区分司机和卖家的字段,你总是可以做这样的事情,如果他们是混合的,那是行不通的。
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
这就是我想出的..很确定它按预期工作。
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