Действительно ли :on => :create для обратного вызова before_save в Rails 3.2.3

Как вы знаете, коллбэки before_saveвыполняются до before_create обратные вызовы.

Поэтому некоторые люди предположили, что лучше использовать before_save :method, :on => :createвместо before_create, чтобы метод обратного вызова выполнялся в правильное время по отношению к другим обратным вызовам (таким как обратные вызовы автосохранения). См., например, этот пост в блоге Pivotal Labsи этот ответ StackOverflow.

Однако, насколько я могу судить, опция :on => :createне дает желаемого эффекта при обратном вызове before_save. Другими словами, обратный вызов выполняется для каждого сохранения, независимо от того, является ли это созданием или нет.

Однако опция :on => :createдействительнокажется допустимой для обратных вызовов before_validation.

Может ли кто-нибудь подтвердить, должно ли :on => :createработать для before_save? Работало ли это в предыдущих версиях Rails и теперь не работает, или вышеупомянутые ссылки просто ошибочны?

Предполагая, что :on => :createнедопустимо, допустимо ли следующее и/или есть ли лучший способ?

before_save :callback_method, :if => :new_record?

Спасибо.

8
задан Community 23 May 2017 в 12:00
поделиться