Сделайте обратный вызов ActiveRecord условным для параметра конфигурации и протестируйте его - PullRequest
1 голос
/ 10 января 2012

Я хочу, чтобы обратный вызов after_update выполнялся только тогда, когда определенный параметр конфигурации имеет значение true. Сначала у меня было что-то вроде этого:

after_update :do_something
...

def do_something
  return unless MyApp::Application.config.some_config
  actualy_do_something
end

Но тогда я подумал, почему бы не сделать условное присвоение обратного вызова? Как это:

after_update :do_something if MyApp::Application.config.some_config

Однако я не до конца понимаю, что я здесь делаю. Когда это изменится? Только на сервере перезагружается? Как мне проверить это поведение? Я не могу просто установить конфигурацию, файл модели больше не будет читаться.

Пожалуйста, сообщите.

1 Ответ

5 голосов
/ 20 января 2012

Стандартный способ достижения условного обратного вызова - передать символ или процедуру в :if:

before_create :generate_authentication_token, :if => :authentication_token_missing?
after_destroy :deliver_thank_you_email, :if => lambda {|user| user.wants_email? }

def authentication_token_missing?
  authentication_token.empty?
end

Этот формат также может ссылаться на глобальную настройку конфигурации на Rails.configuration

after_update :refresh_cache, :if => :cache_available?

def cache_available?
  Rails.configuration.custom_cache.present?
end

Это позволит изменить поведение приложения без перезагрузки сервера или удаления константы и перезагрузки файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...