我想根据条件订购结果。
例如
@redeemables = @business.redeemables.order(expiry_date: :desc)
我希望所有可兑换成expiry_date => nil
的首先是可兑换订单而非desc
在其他方面,具有exipry_date < Date.current
的可兑换项应该在订单的底部。
我怎么能这样做?感谢
答案 0 :(得分:2)
如果您正在使用PostgreSQL,那就是NULLS FIRST
(vs. NULLS LAST
)语句,但是这样做是标准的SQL方法({{ 1}}基本上总能工作),因为CASE
会触发急切的加载,你可能不想发生这种加载。
relation + relation
答案 1 :(得分:2)
获得所需内容的最简单方法是:
@redeemables = @business.redeemables.order("-expiry_date asc")
答案 2 :(得分:0)
您可以这样做:
@redeemables_without_expiry = @business.redeemables.where("expiry_date IS NULL")
@redeemables_with_expiry = @business.redeemables.where("expiry_date IS NOT NULL").order(expiry_date: :desc)
@redeemables = @redeemables_without_expiry + @redeemables_with_expiry
答案 3 :(得分:0)
尝试这样的事情:
@redeemables = @business.redeemables.sort_by {|r| "#{r.expiry_date.blank?} #{r.desc}" }
它基本上做的是通过一个串联字符串排序,该字符串是否有效期(true
/ false
)和描述。 (例如false item_description
)。
如果您想更改零expiry_dates
的排序顺序,可以执行以下操作:
@redeemables = @business.redeemables.sort_by {|r| "#{r.expiry_date.present?} #{r.desc}" }