什么阻止这个观察者在before_save工作正常?

时间:2012-01-11 23:17:36

标签: ruby-on-rails-3 observer-pattern

我为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

1 个答案:

答案 0 :(得分:1)

在Ruby中,方法或块的最后一行的结果用作其返回值,before_save挂钩可以通过返回false来取消save操作。如果你看,你的if user.new_record?分支的最后一行将返回false。确保你的before_save正在返回评估为真的内容,并且你会很好。