加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:15:51 所属栏目:百科 来源:网络整理
导读:我使用Rails 3和SQLite,我正在尝试进行活动记录查询,并使用来自其他模型的信息同时对结果进行排序.我有一个资源模型(属于用户)和一个shared_items模型来处理用户彼此共享资源.我想创建一个用户创建的所有资源以及与之共享的资源.具有工作查询的资源模型: cl
我使用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个记录,我认为我不能采用这个选项.
任何想法都赞赏.

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读