update_column
(Rails >= v3.1) またはupdate_columns
(Rails >= 4.0) を使用して、コールバックと検証をスキップします。また、これらのメソッドでupdated_at
は、更新されません。
#Rails >= v3.1 only
@person.update_column(:some_attribute, 'value')
#Rails >= v4.0 only
@person.update_columns(attributes)
http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update_column
#2:オブジェクトの作成中にも機能するコールバックをスキップする
class Person < ActiveRecord::Base
attr_accessor :skip_some_callbacks
before_validation :do_something
after_validation :do_something_else
skip_callback :validation, :before, :do_something, if: :skip_some_callbacks
skip_callback :validation, :after, :do_something_else, if: :skip_some_callbacks
end
person = Person.new(person_params)
person.skip_some_callbacks = true
person.save
更新 (2020)
どうやら Railsは常に:if
and :unless
optionsをサポートしていたようで、上記のコードは次のように簡略化できます。
class Person < ActiveRecord::Base
attr_accessor :skip_some_callbacks
before_validation :do_something, unless: :skip_some_callbacks
after_validation :do_something_else, unless: :skip_some_callbacks
end
person = Person.new(person_params)
person.skip_some_callbacks = true
person.save