2012-01-11 18 views
0

私はUserクラスのObserverを作成しました(下記)。私はbefore_saveメソッドが呼び出されていることを知っています、そして、私はnew_record条件が入力されていることを知っていますが、新しいレコードは保存されません...私はbefore_saveコールバックにとって基本的な何かを欠いていますか?このオブザーバbefore_saveが正しく動作しない原因は何ですか?

コントローラに保存(プットによって生成されたエラーカウントがゼロである)ように見える:

Rubyで
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

、方法又はブロックの最後の行の結果は、その戻り値として使用されbefore_saveフックは、falseを返すことによってsaveアクションを取り消すことができます。あなたが見た場合、if user.new_record?ブランチの最後の行はfalseを返すでしょう。 before_saveがtrueと評価されるものを返すことを確認してください。

+0

Doh ...ええ、私はそれを忘れました...私はリファクタリングでショットを与えるでしょう。 – Webjedi

+0

スタイルの主題について... before_saveの最後の行をuser.validのようにしていますか?容認できることは何ですか? – Webjedi

+0

私は今までそれが終わったのを見たことはないと思っていますが、私の頭の上から外れない理由は考えられません。 – Emily

関連する問題