我有订阅新闻主题的模型,女巫有订阅/取消订阅的秘密字段:
class TopicSubscription < ActiveRecord::Base
include WithSecret
...
end
这里是模块代码,它生成订阅密钥
module WithSecret
extend ActiveSupport::Concern
included do
attr_accessible :secret
validates_presence_of :secret
before_create :gen_secret
end
def gen_secret
begin
o = [('a'..'z'),('0'..'9')].map{|i| i.to_a}.flatten
code = (0...128).map{ o[rand(o.length)] }.join
end while self.class.send(:"find_by",{secret: code})
self.send("secret=",code)
end
end
问题,如果gen_secret挂钩永远不会触发,我总是得到验证错误。这种奇怪行为的目的是什么?
答案 0 :(得分:1)
before_create
触发。请改用before_validation :gen_secret, on: :create
。