我在模型中有以下范围:
class Office < ApplicationRecord
belongs_to :money_pot
has_one :fiscal_year, through: :money_pot
has_one :money_type, through: :money_pot
scope :order_by_fiscal_year_and_money_type, -> {
joins(money_pot: [:fiscal_year, :money_type])
.order("fiscal_years.end_date desc, money_types.short_name")}
end
此范围确实有效。但是:我想从“纯字符串”语法切换到该order
子句中的“哈希”语法。我认为我遇到了麻烦,因为范围内的order
条款是关联的。
这是我尝试过的但它不起作用:
scope :order_by_fiscal_year_and_grant_type, -> {
joins(money_pot: [:fiscal_year, :money_type])
.order(fiscal_years: {end_date: :desc}, money_types: {short_name: :asc})}
这是它返回的错误:
方向“{:end_date =&gt;:desc}”无效。有效指示是:[:asc,:desc,:ASC,:DESC,“asc”,“desc”,“ASC”,“DESC”]
我查看了Active Record Query Interface Rails指南的ordering section和hash conditions部分。
如何将此范围完全转换为哈希语法?
答案 0 :(得分:3)
我have found不使用普通字符串的唯一方法是merge
:
scope :order_by_fiscal_year_and_money_type, lambda {
joins(money_pot: [:fiscal_year, :money_type])
.merge(FiscalYears.order(end_date: :desc)
.merge(MoneyType.order(:short_name)
}