1

こんにちは、パスワードのリセット アクションに取り組んでいます。しかし、ボタンをクリックすると、次のエラーが表示されます。

nil の id と呼ばれますが、これは誤って 4 になります -- 本当に nil の id が必要な場合は、object_id を使用してください

これが私のpassword_reset_controllerです

 class PasswordResetsController < ApplicationController

    layout "sessions"

  def new
  end

  def create
    user = User.find_by_email(params[:email])
    user.send_password_reset if user
    redirect_to root_url, :notice => "#{user.id}Las instrucciones para reestrablecer la contrasena fueron enviadas."
  end

end

ここに私のユーザーモデルがあります

class User < ActiveRecord::Base
  attr_accessible :email, :password, :password_confirmation
  has_secure_password

  before_save { |user| user.email = email.downcase }
  before_save :create_remember_token

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
  validates :password, presence: true, length: { minimum: 6 }
  validates :password_confirmation, presence: true

    def send_password_reset
        self.password_reset_token = SecureRandom.urlsafe_base64
        self.password_reset_at = Time.zone.now
        save!
    end

  private

    def create_remember_token
        self.remember_token = SecureRandom.urlsafe_base64
    end

end

これはビューです:

<% provide(:title, "Reiniciar Password") %>

<div class="row">
    <div class="span4">
        &nbsp
    </div>
    <div class="span4" id="login-box">  
        <div id="login-controls">
            <%= link_to(image_tag("logo.png"), root_path) %>
            <br>
            <br>

            <%= form_for(:password_resets, url: password_resets_path) do |f| %>
                <%= f.text_field :email, :placeholder => "Correo Electronico", :tabindex => 1, :style => "height:25px;" %>
                <%= f.button "<i class=\"icon-lock icon-white\"></i> Reiniciar Password".html_safe, :tabindex => 2,  class: "btn btn-warning", :style => "width:220px;margin-bottom:5px;" %>
            <% end %>
      </div>
    </div>
    <div class="span4">
    </div>
</div>

ユーザーが見つからない理由がわかりません。Rails コンソールで同じことをしようとすると、メールでユーザーを見つけることができますが、password_reset_token を生成できます。

よろしくお願いします。

ありがとう

4

1 に答える 1

6

params[:password_resets][:email] を使用

して見てくださいUser.all。password_reset_token メソッドを呼び出したユーザー レコードを確認します。

これは、データベースにこの電子メールを持つユーザーがいないことを意味します。

使用する、

user = User.find_by_email!(params[:email])

強打 (!) のあるメソッドは、例外をトリガーします。find_by_emailメールが見つからなかった場合は nil オブジェクトを返します

于 2012-10-28T18:20:11.603 に答える