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

2 ответа

Решение

Вы можете использовать: если

before_save do_something, :if => Proc.new {|model| model.some_boolean_attr_or_method }

или просто

before_save do_something, :if => some_condition

РЕДАКТИРОВАТЬ:

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

http://guides.rubyonrails.org/active_record_callbacks.html

В Rails 5 я успешно определил закрытый метод, который содержит логическую логику, а затем передал его как символ (эта последняя часть кажется требованием). Другими словами:

before_save do_something, if: :private_boolean_method?

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

Другие вопросы по тегам