如果我在创建动作之前有一些:
before_create :generate_token
private
def generate_token
self.auth_token = loop do
random_token = SecureRandom.urlsafe_base64(nil, false)
break random_token unless self.class.exists?(auth_token: random_token)
end
end
在编写验证时,我发现validates :auth_token, presence: true, on: :create
失败。
但是,validates :auth_token, presence: true, on: :after_create
有效。
为什么会这样?
REF。 Active Record Callback Order和Active Record Validations :on
编辑:奇怪的是,on: :before_create
通过验证,on: :create
失败,on: after_create
成功。这很令人费解,有人可以解释一下吗?
答案 0 :(得分:0)
阅读您链接的文档:
(1) before_validation
(-) validate <======== This runs before before_create callbacks are run
(2) after_validation
(3) before_save
(4) before_create
我会考虑在初始化对象时生成令牌。
after_initialized :generate_token