2017-02-27 5 views
0

Deviseを認証として使用するアプリケーションがあります。私はユーザーがそこに電子メールアドレスを変更できるようにしたくありません。私は、電子メール属性をUserモデルでのみ読み取るように設定してこれを行っています。Rails Deviseロールバックトランザクションでエラーが発生しない

class User < ActiveRecord::Base 
    attr_readonly :email 
end 

これはうまくいきます:Railsはトランザクションをロールバックします。 Deviseは、しかし、更新が成功したと考えて、メッセージを表示します。

"Your account has been updated successfully." 

フラッシュ通知を返す私のonwメソッドを作成するなどいくつかのことを試しましたが、アカウントが正常に更新されたということを続けています。

レコードが正しく保存されていないときにエラーを発生する方法はありますか?

アッシュヴィンのアンワーカーの後に編集します。

def email=(address) 
    begin 
    if new_record? 
     write_attribute(:email, address) 
    end 
    rescue Exception => error 
    flash[:alert] = error.message 
    end 
end 

答えて

0

私はあなたの質問を得たかどうか知らない、しかし、私は、次の何を得るのソリューションです:これは私が私のモデルに持っているものです。レコードは、私は、コードを試してみたロールバック

begin 
    # do some stuff here 
rescue Exception => e 
    flash[:notice] = e.message 
end 
+0

ですが、まだ正常にあなたがここにコードを貼り付けてくださいすることができ、あなたが実行している – Samuel

+0

何のアクションの更新だと言っている中は、例外処理を使用することができますので、私は正確なアイデアを得ることができます。 – ashvin

+0

私が使用しているコードのカスタムコードを追加しました。私は、電子メールアドレスがparams [:email]と異なる場合、コントローラのチェックを行う方が良いかもしれないと思っています。 – Samuel

関連する問題