我为User类创建了一个Observer(如下所示)。我知道before_save方法正在被调用,我知道正在输入new_record条件,但新记录永远不会被保存...我是否遗漏了对before_save回调基本的东西?
控制器中的保存看起来像(puts产生的错误计数为零):
def create
@user = User.new(params[:user])
if @user.save
#UserMailer.registration_confirmation(@user).deliver
redirect_to root_url, :notice=>"Signed Up!"
else
puts @user.errors.count
render "new"
end
end
class UserObserver < ActiveRecord::Observer
observe :user
def before_save(user)
if user.new_record?
puts 'HELLLLLLLLLLP'
#todo make a confirmation code generator
user.confirmationcode='1234'
user.confirmed=false
else
if user.email_changed?
user.confirmationcode='123'
user.confirmed=false
end
end
end
def after_save(user)
if user.confirmed=false
UserMailer.confirm_registration(user).deliver
end
end
end
答案 0 :(得分:1)
在Ruby中,方法或块的最后一行的结果用作其返回值,before_save
挂钩可以通过返回false来取消save
操作。如果你看,你的if user.new_record?
分支的最后一行将返回false。确保你的before_save
正在返回评估为真的内容,并且你会很好。