Настройка активной записи в области видимости
У меня есть стол 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) }
2 ответа
@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)
Спасибо еще раз.
static scope:
scope :due, -> { where("mass_verification_date < ?", 90.days.ago) }
В вашем случае это 90.days.ago является своего рода статичным. Если вы хотите сделать его динамическим, вы должны использовать аргументы для этой области.
В следующем примере: scope: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)