Ruby on rails 3 在保存之前,是什么阻止此观察者正常工作?

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=>“已

我已经为用户类创建了一个观察者(如下)。我知道正在调用before_save方法,并且我知道正在输入新的_记录条件,但是从未保存新记录……我是否缺少before_save回调的基本内容

控制器中的保存看起来像(puts产生的错误计数为零):

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