class User < ApplicationRecord
validates :login, :email, presence: true
before_validation :ensure_login_has_a_value
private
def ensure_login_has_a_value
if login.nil?
self.login = email unless email.blank?
end
end
end
如果块内的代码太短以至于它适合一行,请考虑使用这种样式
class User < ApplicationRecord
validates :login, :email, presence: true
before_create do
self.name = login.capitalize if name.blank?
end
end
注意:callback必须放在private方法中:
class User < ApplicationRecord<br/> validates :login, :email, presence: true
private
def ensure_login_has_a_value
if login.nil?
self.login = email unless email.blank?
end
end
end
The following methods trigger callbacks:
create
create!
destroy
destroy!
destroy_all
destroy_by
save
save!
save(validate: false)
toggle!
touch
update_attribute
update
update!
valid?
Additionally, the
after_find
callback is triggered by the following finder methods:
class User < ApplicationRecord
has_many :articles, dependent: :destroy
end
class Article < ApplicationRecord
after_destroy :log_destroy_action
def log_destroy_action
puts 'Article destroyed' end
end
验证:
user = User.first
user.articles.create!
user.destroy