Подтвердить что ты не робот

Есть ли способ сделать условие 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.

4b9b3361

Ответ 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?

Это тонкая разница, но кажется элегантным решением.