1

下面显示的两种方法之间有什么区别以及更好的方法:

        user.photos & Photo.public

        user.photos.where('photos.id IN (?)', Photo.public.select(:id))

有没有更好的方法来组合两个活动记录查询?

4

3 回答 3

1

第一个将使用数组连接,第二个是执行两个查询,都没有向 Photo 模型添加另一个范围有效:

 # Photo Model
  scope :public, where {:public => true }
  scope :user, lambda { |user| where("user_id = ?", user) }

  # Controller
  Photo.public.user(user)
于 2013-06-12T09:46:39.703 回答
1

鉴于 Photo#public 是一个范围,例如:

scope :public, -> { where(:public => true) }

你可以简单地写

user.photos.public
于 2013-06-12T09:47:05.643 回答
0

如果您不能使用新范围,我建议您:

user.photos.merge(Photo.public)
于 2013-06-12T09:59:08.690 回答