Настройка активной записи в области видимости

У меня есть стол 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)
Другие вопросы по тегам