【发布时间】:2018-05-20 16:05:31
【问题描述】:
我有两个范围。一个检查 db 列是否为空或空字符串,另一个检查相反(非空,非空字符串)
scope :has_something, where('something IS NOT NULL AND something != ""')
scope :has_no_something, where('something IS NULL OR something = ""')
我想最终将两个结果连接起来。即有东西的结果后面跟着没有东西的结果
我的第一次尝试是这样的:
def self.with_something_data_first
has_something + has_no_something
end
这会导致:
NoMethodError: 未定义的方法 `order' 用于#
因为这个方法是和一个订单结合的
Model.with_something_data_first.order(:created_at).reverse_order.limit(20)
如果我可以在一个范围内执行此操作,它会返回所有包含数据的记录,然后是所有包含 null 或空字符串的记录。显然,您不能按 nil 订购,但也许您知道解决这个问题的棘手方法?
【问题讨论】:
-
问题是当你连接“+”时,你得到一个数组,而不是一个 Active Record,所以你不能使用 order
标签: ruby-on-rails activerecord scope