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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读