如何为中间表创建范围?

时间:2014-11-06 12:09:28

标签: ruby-on-rails scope models

我有2个表,:photos:albums,以及名为:photo_listings的2个匹配表。

我只想显示里面有照片的相册,所以,我在相册模型中创建了一个范围:

scope :with_photos, -> {includes(:photos)}

问题是:photos不是:albums的直接列,因为照片和相册是 通过:photo_listings匹配。那么,我如何为仅列出已分配照片的专辑的专辑制作范围?

Photo_listings模型

class PhotoListing < ActiveRecord::Base
  belongs_to :album
  belongs_to :photo
end

相册模型

class Album < ActiveRecord::Base
  has_many :photo_listings
end

照片模型

  has_many :photo_listings
  has_many :albums, :through => :photo_listings
  end

1 个答案:

答案 0 :(得分:0)

您可以将其添加到Album

class Album < ActiveRecord::Base
  has_many :photo_listings
  has_many :photos, through: :photo_listings # this line
end

然后你的范围应该有效。您错过了photos模型上的Album关系。