Jac*_*cob 8 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1
如何编写以下默认范围:
class SimilarMerchant < ActiveRecord::Base
# relationships
belongs_to :merchant
belongs_to :similar_merchant, :foreign_key => 'similar_merchant_id', :class_name => "Merchant"
# scopes
default_scope order('merchants.is_paid DESC').order('score DESC')
end
Run Code Online (Sandbox Code Playgroud)
基本上我想按merchant.is_paid字段排序(属于相关模型)
有什么建议?
Mar*_*oda 13
试试这个:
default_scope joins(:merchant).order('merchants.is_paid DESC, score DESC')
Run Code Online (Sandbox Code Playgroud)
请记住它可能很慢,具体取决于记录的数量
这是你可以做什么来获得所需的功能,但这样做并不是一个好主意,请阅读直到最后
您可以定义默认范围以包括商家关联,然后按顺序排列 merchants.is_paid DESC, score DESC
看起来像
default_scope includes(:merchants).order('merchants.is_paid DESC, score DESC')
Run Code Online (Sandbox Code Playgroud)
但是,这意味着每当您因任何原因获取类似的商家对象时,您也会加载关联
这不是很好,我建议有一个明确的范围加载类似的商家与关联和订购:
scope :with_merchants, includes(:merchants).order(...)
Run Code Online (Sandbox Code Playgroud)
这样你就可以在代码中知道从数据库中加载到底是什么