【问题标题】:What is preventing this observer before_save from working properly?是什么阻止了这个观察者 before_save 正常工作?
【发布时间】:2012-01-11 23:17:35
【问题描述】:

我为 User 类创建了一个观察者(如下)。我知道调用了 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

【问题讨论】:

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


    【解决方案1】:

    在 Ruby 中,方法或块的最后一行的结果作为其返回值,before_save 钩子可以通过返回 false 来取消 save 动作。如果你看,if user.new_record? 分支的最后一行将返回 false。确保您的 before_save 返回的结果为 true,这样您就可以了。

    【讨论】:

    • Doh...是的,我忘记了...好的,我会尝试重构。
    • 关于风格的主题......是否正在制作 before_save 的最后一行类似于 user.valid?可以接受的事情吗?
    • 我认为我从来没有见过它完成,但我想不出任何理由不去想。
    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2022-01-12
    • 2021-06-26
    相关资源
    最近更新 更多