我使用范围来获取随机横幅,我使用了gem Randumb
scope :sidebar_top, -> { where(ad_type_id: 2).order_by_rand.first }
如果未找到广告,则返回所有行。根据Randumb文档,在没有找到任何内容的情况下它应该返回nil。
我应该首先使用范围来返回单个实例吗?这似乎是最好的方式,但我很少看到范围示例返回的不到一小部分。
如果找不到任何内容,我会如何回复nil?
由于
答案 0 :(得分:0)
这样的东西?类方法而不是范围。
def self.sidebar_top
where(ad_type_id: 2).blank? ? nil : where(ad_type_id: 2).order_by_rand.first
end
答案 1 :(得分:0)
您不应该使用范围来返回单个实例。观察[1]
至于答案:
def self.sidebar_top
Array(where(ad_type_id: 2).order_by_rand).first # single query
end
[1]范围期望范围返回:如果proc返回nil或false,则返回范围。
scope :this_or_all, ->(feeling) { where(state: feeling) if feeling.present? }
因此,您可以执行此操作User.this_or_all(nil).this_or_all(happy)
。