我使用 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
此查询创建了一个很好的“提要”数组,其中包含已与用户共享或由用户创建的所有资源,但它们按资源创建日期排序,而不是我想要做的相应 shared_item 的创建日期。如何在数据库级别编写排序?我以为我可以在 Ruby 中进行排序(就像 Ian 建议的 here ),但是由于我想在分页中一次获取 25 条记录,我认为我不能选择该选项。
任何想法表示赞赏。
最佳答案
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
关于ruby-on-rails - Active Record 查询按模型关联排序 : Rails 3 & SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7163998/