模型
class User
has_many :pictures
class Picture
belongs_to User
mount_uploader :picture, UserPictureUploader
def self.profile
find_by(is_profile: true)
end
控制器
User.includes(:pictures).where(...
查看
=user.pictures.profile.picture_url
这导致以下问题,即将再次查询每张图片。
如果我们使用user.pictures.where(profile: true).picture_url
,它将不会进行任何新的SQL查询。
我们如何在已包含的结果中使用范围?
答案 0 :(得分:0)
如下所示
class User
has_many :pictures
scope :some_name, -> { includes(:pictures).where(your_query_here) }
end
此外,scopes
仅用于Class
(换言之,它们是class methods
),如果您想在instance
上使用它,那么您需要定义类似下面的实例方法
class User
has_many :pictures
def some_name
self.includes(:pictures).where(your_query_here)
end
end
答案 1 :(得分:0)
经过一番挖掘,我发现了这个问题
What is the equivalent of the has_many 'conditions' option in Rails 4?
看起来你可以把你的has_many关系的条件基本上放在你正在寻找的范围配置上。这有点像:
has_many :old_pictures, :class_name => 'Picture',
:foreign_key => 'picture_id', -> { where('created_at < ?', Time.now - 7.days) }