我有一个Sellers
模型,他们拥有games
和unlimited_games
,可以被其他players
购买。我想提取特定seller
的所有购买。我只有games
时的模型是:
class Seller
has_many :purchases, through: :games, dependent: :destroy
end
class Purchase
belongs_to :game
end
class Game
has_many :purchases
belongs_to :coach
end
def UnlimitedGame
has_many :purchases
belongs_to :coach
end
def Purchase
belongs_to :game
belongs_to :unlimited_game
end
我可以@seller.purchases
为该卖家购买所有商品。现在我想扩展相同的功能以包含所有unlimited_games
这样@seller.purchases
包括unlimited_games
和games
。我试过了:
has_many :purchases, through: :games, dependent: :destroy, class_name: :purchases
has_many :purchases, through: :unlimited_games, dependent: :destroy, class_name: :purchases
答案 0 :(得分:0)
Supussing unlimited_games
本身不是模型,而是games
模型的范围,那么您可以在Seller
模型中执行类似的操作:
def unlimited_game_purchases
purchases.merge(Game.unlimited)
end
使用merge合并两个查询的条件
顺便说一句,当然有一种方法可以创建另一个与同一模型的关联,如果您说卖家也有has_many :unlimited_games
已经有效,那么您的关联将如下所示:
has_many :unlimited_game_purchases, trough: :unlimited_games, source: :game
您可以选择更好理解的方式