2017-06-28 1 views
0

timeout when uodatingパスワードをリセットし、機能はここレール

に動作を停止し更新する私のコードです:私はパスワードリセットトークンのパスを入力した後 password_resets_controller.rb

 class PasswordResetsController < ApplicationController 
     before_action :get_user,   only: [:edit, :update] 
     before_action :valid_user,  only: [:edit, :update] 
     before_action :check_expiration, only: [:edit, :update] 

     def new 
     end 

     def create 
     # @user = User.find_by(email: params[:password_resets]  [:email].downcase) 
     @user = User.find_by(email: params[:password_reset][:email].downcase) 
     if @user 
      @user.create_reset_digest 
      @user.send_password_reset_email 
      flash[:info] = "Email sent with password reset instructions" 
      redirect_to root_url 
     else 
      flash.now[:danger] = "Email address not found" 
      render 'new' 
     end 
     end 

     def edit 
     end 

     def update 
     if params[:member][:password].empty? 
      @user.errors.add(:password, "Can't be empty") 
      render 'edit' 
     elsif @user.update_attributes(user_params) 
      # log_in @user 
      flash[:success] = "Password has been reset." 
      redirect_to @user 
     else 
      render 'edit' 
     end 
     end 

     private 
     def user_params 
      params.require(:member).permit(:password, :password_confirmation) 
     end 

     def get_user 
      @user = User.find_by(email: params[:email]) 
     end 

     # Confirms a valid user. 
     def valid_user 
      unless @user 
      redirect_to root_url 
      end 
     end 

     # Check expiration of reset token. 
     def check_expiration 
      if @user.password_reset_expired? 
      flash[:danger] = "Password reset has expired." 
      redirect_to new_password_reset_url 
      end 
     end 

    end 

Thrの状況があり、私が入れ新しいパスワードとpassword_confirmation。それから私は更新をクリックします。ただし、このエラーページが表示されます。私は本当にこれを理解する方法を知らない。

ここに私の編集ファイルされる:

<div class="row"> 
     <div class="col-md-6 col-md-offset-3"> 
     <%= form_for(@user, url: password_reset_path(params[:id])) do |f| %> 
      <%= render 'shared/error_messages' %> 

      <%= hidden_field_tag :email, @user.email %> 

      <%= f.label :password %> 
      <%= f.password_field :password, class: 'form-control' %> 

      <%= f.label :password_confirmation, "Confirmation" %> 
      <%= f.password_field :password_confirmation, class: 'form-control' %> 

      <%= f.submit "Update password", class: "btn btn-primary" %> 
     <% end %> 
     </div> 

ここでは、ログです:ここではenter image description here

は私のユーザーテーブルである:ここで enter image description here

は、変更後のログですpassword_reset_path (params [:id])からpassword_reset_path(@user)へ enter image description here

+0

あなたのparamsがいるようです空である。問題はあなたのフォームにあります。あなたのログからあなたのparamsを投稿できますか? –

答えて

1

あなたのログが示すように、あなたのformが、代わりにusermemberキーを送信するために問題がある:

Parameters: { 
    "utf8"=>"✓", 
    "authenticity_token"=>"...", 
    "email"=>"[email protected]", 
    "member"=>{ 
    "password"=>"[FILTERED]", 
    "password_confirmation"=>"[FILTERED]" 
    }, 
    ... 
} 

だから、それは対応できませんので、nilを返し、params[:user]userキーが存在しないため、 []に、エラーが発生:

undefined method `[]' for nil:NilClass

memberである理由私が見ることができないあなたのコントローラとビューを見ます代わりに userの使用されているが、あなたはこのように、 as: "user"を使用して userキーを送信するために、あなた formを強制することができます場所にこれで

<%= form_for(@user, url: password_reset_path(params[:id]), as: "user") do |f| %> 

を、あなたのパラメータは、今のようになります

Parameters: { 
    "utf8"=>"✓", 
    "authenticity_token"=>"...", 
    "email"=>"[email protected]", 
    "user"=>{ 
    "password"=>"[FILTERED]", 
    "password_confirmation"=>"[FILTERED]" 
    }, 
    ... 
} 
+0

params [:user] [:password]を保持したい場合はどうすればいいですか?私は何をすべきか?ちなみに、フォームでユーザーの代わりにメンバーキーを送信することをどうやって伝えることができますか? –

+0

メンバーのメンバーではないフォームキーを作成するにはどうすればよいですか? –

+0

私は今どこに問題があるのか​​を知ることができます。ありがとう。しかし、私はメンバーに変更した後。もう一つ問題があります。 NoMethodError(未定義メソッド 'member_url 'for#): –

関連する問題