组合两个活动记录查询的最佳方法

时间:2013-06-12 09:41:21

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

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

        user.photos & Photo.public

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

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

3 个答案:

答案 0 :(得分:1)

第一个是使用数组连接,第二个是进行两个查询,两者都没有像为Photo模型添加另一个范围那样高效:

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

  # Controller
  Photo.public.user(user)

答案 1 :(得分:1)

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

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

你可以简单地写

user.photos.public

答案 2 :(得分:0)

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

user.photos.merge(Photo.public)