ruby-on-rails - Active Record 查询按模型关联排序 : Rails 3 & SQLite

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

我使用 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/

相关文章:

ruby-on-rails - Rails 如何查询关联定义

ruby-on-rails - Rails : Using . 对连接的引用,即使它不是必需的

ruby-on-rails - self.included——包含来自 Ruby 模块的类方法

ruby-on-rails - Rails 3 中的作用域与类方法

ruby-on-rails - 如何在我的 Gemfile 中指定本地 gem?

postgresql - 如何进行允许按部分值查找的 Active Record 查询

ruby-on-rails - 异常消息 : no such file to load in rails application

mysql - 每当 gem 时,如何编写 Rails cron 作业?

ruby-on-rails-3 - rails request.env ["HTTP_REFERER"] 在heroku 上给nil

ruby-on-rails - 具有来自同一个表的多个 id 的 Rails 关系表