我有一个表格business_settings
,使用key
和value
列来存储商家的设置。
我写了一个帮助来收集这些值:
def bus_setting(bus_key)
bus_setting = BusinessSetting.where(key: bus_key).first
return bus_setting.nil? ? bus_key : bus_setting.value
end
在这种情况下,返回的值是一个值为90的整数。
这是我尝试编写的范围,但帮助器bus_setting
导致"未定义的方法`bus_setting'对于类:0x00 ..."
scope :due, -> { where("mass_verification_date < ?", bus_setting('MASS_VERIFICATION_INTERVAL')to_i.days.ago) }
我是在写这种方式还是犯了一个愚蠢的错误?感谢
编辑:此范围实现了我之后的结果,但我不想对该值进行硬编码。
scope :due, -> { where("mass_verification_date < ?", 90.days.ago) }
答案 0 :(得分:1)
static scope:
scope :due, -> { where("mass_verification_date < ?", 90.days.ago) }
在你的情况下,这个90.days.ago有点静态。如果你想让它变得动态,那么你应该使用这个范围的参数。
在下面的示例中,范围:due, - &gt;(n),这里n是在评估where条件时将使用的参数。
Make it dynamic:
scope :due, ->(n) { where("mass_verification_date < ?", n.days.ago) }
现在,在使用参数值调用此特定范围时:3将获取具有mass_verfication_date&lt;的所有业务设置。 3.days.ago
Call this :
BusinessSetting.due(3)
答案 1 :(得分:0)
@Ajay,感谢您的意见 - 我实际上实施了一个混合解决方案:
mass_verification.rb
scope :due, ->(n) { where("mass_verification_date < ?", n.to_i.days.ago) }
def mass_interval
mass_interval = bus_setting("MASS_VERIFICATION_INTERVAL")
end
并启动bus_setting
助手:
include BusinessSettingsHelper
电话看起来像这样:
MassVerification.due(mass_interval)
再次谢谢你。