范围内的活动记录设置
activerecord setting in scope
我有一个 table 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
导致 "undefined method `bus_setting' for Class: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) }
static scope:
scope :due, -> { where("mass_verification_date < ?", 90.days.ago) }
在你的例子中,这个 90.days.ago 是静态的。如果你想让它成为动态的,那么你应该为此范围使用参数。
在下面的示例中,范围 :due, ->(n),这里的 n 是将在计算 where 条件时使用的参数。
Make it dynamic:
scope :due, ->(n) { where("mass_verification_date < ?", n.days.ago) }
现在,在使用参数值调用此特定范围时:3 将获取具有 mass_verfication_date < 3.days.ago
的所有业务设置
Call this :
BusinessSetting.due(3)
@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)
再次感谢您。
我有一个 table 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
导致 "undefined method `bus_setting' for Class: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) }
static scope:
scope :due, -> { where("mass_verification_date < ?", 90.days.ago) }
在你的例子中,这个 90.days.ago 是静态的。如果你想让它成为动态的,那么你应该为此范围使用参数。
在下面的示例中,范围 :due, ->(n),这里的 n 是将在计算 where 条件时使用的参数。
Make it dynamic:
scope :due, ->(n) { where("mass_verification_date < ?", n.days.ago) }
现在,在使用参数值调用此特定范围时:3 将获取具有 mass_verfication_date < 3.days.ago
的所有业务设置Call this :
BusinessSetting.due(3)
@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)
再次感谢您。