2012-04-29 6 views
0

「パスワードを忘れました」リンクを作成するには、Railscastのチュートリアルに従っています。私は、パスワードリセット用のクッキーを作成するときに問題に遭遇しています。ここでエラーです:パスワードリセットの引数エラーコントローラ

ArgumentError in PasswordResetsController#create 
wrong number of arguments (1 for 0) 
Rails.root: C:/Sites/application 

Application Trace | Framework Trace | Full Trace 
app/models/user.rb:37:in `create_remember_token' 
app/models/user.rb:29:in `send_password_reset' 
app/controllers/password_resets_controller.rb:7:in `create' 

../app/models/user.rbは - ライン28 remember_token(:password_reset_token)

before_save :create_remember_token 
before_create { create_remember_token(:remember_token) } 

def send_password_reset 
    create_remember_token(:password_reset_token) 
    save! 
    UserMailer.password_reset(self).deliver 
end 

private 
def create_remember_token 
    self.remember_token = SecureRandom.urlsafe_base64 
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 
end 
です

../app/helpers/sessions_helper.rb

def sign_in(user) 
    cookies.permanent[:remember_token] = user.remember_token 
    current_user = user 
end 

def current_user 
    @current_user ||= user_from_remember_token 
end 

def sign_out 
    current_user = nil 
    cookies.delete(:remember_token) 
end 

private 

    def user_from_remember_token 
    remember_token = cookies[:remember_token] 
    User.find_by_remember_token(remember_token) unless remember_token.nil? 
    end 
end 

コントローラーのユーザーが次のように変更された場合:user = User.find_by_email(params[:session][:email])最初のエラーは消えます。私はこれが私にユーザーを間違って呼び出していると私に言っていると思うだけで、リセット時に新しいトークンを割り当てていないと思う。

答えて

1

「remember_token」メソッドを持つRailscastを見ると、Userクラスに追加された「generate_token」メソッドが使用されます。そのようなタイプミスはもちろん問題ではないかもしれませんが、エラーメッセージが意味をなさないのであれば(これまで存在しなかったメソッドは引数を期待しません)。

+0

私はトークンの割り当てと完全に混同していることを知っています。以前はクッキーを作成する方法を開発していましたが、同じ方法を使い続けたいと思っていましたが、2つをマージしようとしていました。私は情報を含むように私のuser.rbを更新して、私はまた、私のヘルパーを追加しました。 – glennm

+0

どこにでもremember_tokenメソッドが定義されているところはありません。あなたは、remember_tokenというクラス変数を作成するcreate_remember_tokenというメソッドを持っています。 "remember_token(:password_reset_token)"を呼び出すと、 "remember_token"はクラス変数(引数はないはずです)であるためエラーになりますが、create_remember_tokenのように引数を渡しています方法。 –

+0

スティーブ、そうです。 'create_remember_token(:password_reset_token)'を呼び出すコードを更新し、user.rbファイル 'before_create {create_remember_token(:remember_token)}'に追加しました。私はまだ3つのエラーを取得しています。 – glennm