3

パスワードのリセット機能を設定しています。送信すると、パスワードのリセット リンクが記載されたメールが送信されます。Railscast のエピソード 274で説明されているように、これをゼロから行っています。ただし、メールを送信すると、このエラーが発生します。

PasswordResetsController#create の NoMethodError

undefined method `password_reset_sent_at=' for # <User:0xa9fd828>

app/models/user.rb:26:in `send_password_reset'
app/controllers/password_resets_controller.rb:7:in `create'

リクエスト

パラメーター:

{"utf8"=>"✓",
"authenticity_token"=>"HnuB/J15XZtz3MTCd25MCwm06M3G2AbcRH+cFxzdj+8=",
"email"=>"cauterise@gmail.com",
"commit"=>"Reset Password"}

開発ログは上記と同じことを言っています^

アプリ/モデル/user.rb

def send_password_reset
  generate_token(:password_reset_token)
  self.password_reset_sent_at = Time.zone.now
  save!
  UserMailer.password_reset(self).deliver
end

def generate_token(column)
  begin
  self[column] = SecureRandom.urlsafe_base64
  end while User.exists?(column => self[column])
end

app/controllers/password_resets_controller.rb

class PasswordResetsController < ApplicationController
  def new
  end

def create
  user = User.find_by_email(params[:email])
  user.send_password_reset if user
  redirect_to root_url, :notice => "Email sent with password reset instructions."
end

def edit
  @user = User.find_by_password_reset_token!(params[:id])
end

def update
  @user = User.find_by_password_reset_token!(params[:id])
  if @user.password_reset_sent_at < 2.hours.ago
    redirect_to new_password_reset_path, :alert => "Password reset has expired."
  elsif @user.update_attributes(params[:user])
    redirect_to root_url, :notice => "Password has been reset!"
  else
    render :edit
  end
end
end

アプリ/コントローラー/application_controller.rb

def current_user
  @current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]

app/vies/password_resets/new,html.haml

%h1 Reset Password
= form_tag password_resets_path, :method => :post do
  .field
    = label_tag :email
    = text_field_tag :email, params[:email]
  .actions
    = submit_tag "Reset Password"
  end

私はすでに rake:db:reset と rake:db:migrate と RESET SERVER を実行しました。

編集:デシベルユーザー

  • id 整数 主キー

  • 電子メール varchar(255)

  • password_hash varchar(255)

  • password_salt varchar(255)

  • created_at 日時

  • updated_at 日時

  • auth_token varchar(255)

  • password_reset_token varchar(255)

  • password_reset_send_at日時

4

1 に答える 1

1

データベース ユーザーの列 password_reset_send_at は password_reset_sent_at である必要があるようです。これを変更するには、移行ファイルに移動し、その簡単な変更を行ってから実行します

$ rake db:reset
$ rake db:migrate
于 2013-04-25T13:03:18.540 に答える