0

私の電子メール変更コードのpassword_resetコードと同じコードを使用しています。 ユーザーは電子メールアドレスを変更して電子メールアドレスを入力したいので、ボタンをクリックするとログアウトします。ActiveSupport :: TimeWithZoneがruby on ruby​​でエラーに失敗しました

クリックされたリンクを含む電子メールが送信され、IDとしてコードが格納され、実際にアカウント所有者であることを確認するためにdbに格納されているコードと一致します。どのような方法で私がクリックすると私は以下のエラーが表示されます。

問題は、私はこのエラーを取得しています:

ArgumentError in EmailsController#edit 

comparison of String with ActiveSupport::TimeWithZone failed 
Rails.root: /Users/greg/site 

Application Trace | Framework Trace | Full Trace 
app/controllers/emails_controller.rb:19:in `<' 
app/controllers/emails_controller.rb:19:in `edit' 
Request 

Parameters: 

{"id"=>"KdFTTeWuOGqpDm6F_iY7aw"} 
Show session dump 

Show env dump 

Response 

Headers: 

None 

メールコントローラが作成:

def create 
    @user = User.find_by_email(params[:email_change][:email]) 
    logout if logged_in? 
    @user.generate_and_store_email_change_token && UserMailer.email_change(@user).deliver if @user 
    flash[:success] = "Email sent with email reset instructions." 
    redirect_to root_url 
    end 

メールコントローラ編集:

def edit 
    @user = User.find_by_email_change_token(params[:id]) 
    if @user.nil? 
     flash[:error] = "The email change link you clicked has been used." 
     redirect_to root_url 
    elsif @user.email_change_sent_at < 2.hours.ago 
     flash[:error] = "Email change token has expired." 
     redirect_to email_change_url 
    end 
    end 

Userモデル:

def generate_and_store_email_change_token 
     self.email_change_token = SecureRandom.urlsafe_base64 
     self.email_change_sent_at = Time.zone.now 
     save!(:validate => false) 
    end 

    def remove_used_email_change_token 
     self.email_change_token = nil 
     save!(:validate => false) 
    end 

これは、パスワードリセットでまったく同じコードが機能するため、これは奇妙です。私はもう一度テストして、私は電子メール版が私に与えるエラーを取得しません。

種類email_change_sent_atタイプstringであるように思える

+0

あなたは日時計だと確信していますか? –

+0

ああはい!それは今私がテストしてもそれを説明します。私は実際に移行を作成し、昨日の属性タイプを文字列に設定することを覚えています。私は確認するためにテストしましょう。 – LondonGuy

+0

ありがとうございました!多分あなたはあなたの答えを掲示することができ、私はそれを受け入れてあなたに印を付けることができます。 – LondonGuy

答えて

2

に関して。あなたはそれを `email_change_sent_at`の種類に変更する必要があります。datetime

+0

感謝の気持ちがなくなった! – LondonGuy

関連する問題