私の電子メール変更コードの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
であるように思える
あなたは日時計だと確信していますか? –
ああはい!それは今私がテストしてもそれを説明します。私は実際に移行を作成し、昨日の属性タイプを文字列に設定することを覚えています。私は確認するためにテストしましょう。 – LondonGuy
ありがとうございました!多分あなたはあなたの答えを掲示することができ、私はそれを受け入れてあなたに印を付けることができます。 – LondonGuy