Есть ли способ сделать условие before_save условным?
Я пытаюсь сделать before_save в приложении rails условным, но он, похоже, не работает.
before_save method_call_to_run if self.related_model.some_method_that_returns_t_or_f?
Если "some_method_that_returns_t_or_f" возвращает true, я хочу, чтобы он запускал метод до того, как он сохранит объект, иначе я просто хочу, чтобы он игнорировал before_save.
Ответы
Ответ 1
вы можете использовать: if
before_save do_something, :if => Proc.new {|model| model.some_boolean_attr_or_method }
или просто
before_save do_something, :if => some_condition
EDIT:
для краткой справки, есть отличное руководство по этому поводу:
http://guides.rubyonrails.org/active_record_callbacks.html#conditional-callbacks
Ответ 2
В Rails 5 у меня был успех, определяющий частный метод, который содержит логическую логику и затем передает ее как символ (эта последняя часть кажется требованием). Другими словами:
before_save do_something, if: :private_method?
Это тонкая разница, но кажется элегантным решением.