私の Rails アプリには、プロファイルを更新するために使用できるupdate
アクションがあります。users
私が実現したいトリッキーなことは、ユーザーが新しい電子メール アドレスを入力して保存した場合、その電子メール アドレスがemail
すぐにデータベース フィールドに保存されるのではなく、 というデータベース フィールドに保存されることnew_email
です。フィールドemail
はそのままにしておく必要があります (少なくとも、user
後でその電子メール アドレスを確認するまで)。
def update
current_email = @user.email
new_email = params[:user][:email].downcase.to_s
if @user.update_attributes(params[:user])
if new_email != current_email
@user.change_email(current_email, new_email)
flash[:success] = "Profile updated. Please confirm your new email by clicking on the link that we've sent you."
else
flash[:success] = "Profile updated."
end
redirect_to edit_user_path(@user)
else
render :edit
end
end
ユーザーモデル:
def change_email(old_email, new_email)
self.new_email = new_email.downcase
self.email = old_email
self.send_email_confirmation_link
end
上記の機能は機能しますが、テストが難しく、正しくないと感じます。これを達成するためのよりスムーズな方法はありますか?
助けてくれてありがとう。