Ruby on rails 3 在保存之前,是什么阻止此观察者正常工作?
我已经为用户类创建了一个观察者(如下)。我知道正在调用before_save方法,并且我知道正在输入新的_记录条件,但是从未保存新记录……我是否缺少before_save回调的基本内容 控制器中的保存看起来像(puts产生的错误计数为零):Ruby on rails 3 在保存之前,是什么阻止此观察者正常工作?,ruby-on-rails-3,observer-pattern,Ruby On Rails 3,Observer Pattern,我已经为用户类创建了一个观察者(如下)。我知道正在调用before_save方法,并且我知道正在输入新的_记录条件,但是从未保存新记录……我是否缺少before_save回调的基本内容 控制器中的保存看起来像(puts产生的错误计数为零): def创建 @user=user.new(参数[:user]) 如果@user.save #UserMailer.registration\u confirmation(@user.deliver) 将\u重定向到root\u url,:notice=>“已
def创建
@user=user.new(参数[:user])
如果@user.save
#UserMailer.registration\u confirmation(@user.deliver)
将\u重定向到root\u url,:notice=>“已注册!”
其他的
放置@user.errors.count
呈现“新”
结束
结束
类UserObserver
在Ruby中,方法或块的最后一行的结果用作其返回值,在保存之前的钩子可以通过返回false来取消保存操作。如果查看,If user.new\u record?
分支的最后一行将返回false。在保存之前,确保你的返回的值为true,你会很好。Doh…是的,我忘了…好的,我将尝试重构。在样式方面…在保存之前的最后一行是否与user.valid类似?这是一件可以接受的事情吗?我想我从来没有见过这样的事情,但我想不出任何理由不去想。
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