我使用Rails 3和SQLite,我正在尝试进行活动记录查询,并使用其他模型的信息同时对结果进行排序。我有一个资源模型(属于用户)和一个shared_items模型来处理用户彼此共享资源。我想创建一个用户创建的所有资源以及与之共享的资源。具有工作查询的资源模型:
class Resource < ActiveRecord::Base
has_many :shared_items, :dependent => :destroy
default_scope :order => 'resources.shared_items.created_at DESC'
scope :from_users_sharing_with, lambda { |user| shared_with(user) }
private
def self.shared_with(user)
resource_ids = %(SELECT resource_id FROM shared_items WHERE shared_with_id = :user_id)
where("id IN (#{resource_ids}) OR user_id = :user_id",
{ :user_id => user })
end
此查询创建了一个由用户共享或创建的所有资源的良好“feed”数组,但它们是按资源创建日期排序的,而不是相应的shared_item的创建日期,这正是我要查找的内容做。如何在数据库级别编写排序?我以为我可以在Ruby中进行排序(就像Ian建议here)但是因为我想在分页中一次获取25个记录,我不认为我可以选择。 任何想法都赞赏。
答案 0 :(得分:3)
class Resource < ActiveRecord::Base
has_many :shared_items, :dependent => :destroy
scope :from_users_sharing_with, lambda { |user|
includes(:shared_item).
where("shared_items.shared_with_id = ? OR resources.user_id = ?", user.id, user.id).
order("shared_items.created_at DESC")
# might need to add `select("DISTINCT resources.*")` at the end
}
end