多个has_many ::通过与关联的关系

时间:2018-04-23 13:35:04

标签: ruby-on-rails ruby ruby-on-rails-4 associations

我有一个Sellers模型,他们拥有gamesunlimited_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_gamesgames。我试过了:

has_many :purchases, through: :games, dependent: :destroy, class_name: :purchases

has_many :purchases, through: :unlimited_games, dependent: :destroy, class_name: :purchases

1 个答案:

答案 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

您可以选择更好理解的方式

相关问题