2015-01-27 2 views
0

У меня есть таблица business_settings, которая использует key и value столбцы для хранения настроек для бизнеса.activerecord setting in scope

Я написал помощник, чтобы собрать эти значения:

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) } 

собираюсь ли я об этом, как писать или я сделал глупую ошибку? Спасибо

EDIT: Эта область достигает результата, который я получаю, но я не хочу жестко кодировать значение. scope :due, -> { where("mass_verification_date < ?", 90.days.ago) }

+0

попробуйте добавить 'helper_method: bus_settings' ниже вашего вспомогательного метода и посмотреть, работает ли это. –

ответ

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)

ThankYou снова.

1
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) 
+0

Не могли бы вы добавить немного больше объяснений коду, который вы указали? Без этого люди могут оказаться не очень полезными. – Trilarion

+0

@Trilarion Спасибо за указание. Добавлено объяснение :) – Ajay