0

我有一个表business_settings,它使用keyvalue列来存储企业的设置。

我写了一个助手来收集这些值:

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程序导致“类:0x00 的未定义方法 `bus_setting'...”

scope :due, -> { where("mass_verification_date < ?", bus_setting('MASS_VERIFICATION_INTERVAL')to_i.days.ago) }

我是按这种方式写的还是我犯了一个愚蠢的错误?谢谢

编辑:这个范围实现了我想要的结果,但我不想硬编码这个值。 scope :due, -> { where("mass_verification_date < ?", 90.days.ago) }

4

2 回答 2

1
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)
于 2015-01-27T08:15:01.253 回答
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)

再次感谢你。

于 2015-01-27T10:29:27.243 回答