1

本の第 14 章「ログイン」の記述例に従っています。「127.0.0.1:3000/login」のビューは正常に機能していますが、ユーザーとパスワードを挿入すると、次のエラーが返されます。

SessionsController#create の NoMethodError

未定義のメソッド `authenticate' for #< User:0x9f75978>

それを解決する方法は?

create メソッド sessions_controller.rb は次のとおりです。

  def create
    user = User.find_by_name(params[:name])
    if user and user.authenticate(params[:password])
      session[:user_id] = user.id
      redirect_to admin_url
    else
      redirect_to login_url, alert: "Invalid user/password combination"
    end
  end
4

2 に答える 2

4

Userを呼び出そうとしauthenticateています。これは、おそらく user に認証メソッドがないことを意味します。その場合は、プライベートでないことを確認してください。

于 2012-05-15T19:42:37.787 に答える
2

指定したコードは、User オブジェクトのインスタンスauthenticateでメソッドを呼び出そうとします。

あなたのコメント re: に基づいてUser.authenticate(name, password)、 Userクラスでのみ認証メソッドがあり、名前とパスワードの両方をパラメーターとして受け取ります。

User クラス メソッドを呼び出すには、代わりに次を使用します。

user = User.find_by_name(params[:name])
if user && User.authenticate(params[:name], params[:password])

authenticateまたは、 (上記の @caulfield のように) 次のようなインスタンス レベルのメソッドを探します。

def authenticate(password)
  # does stuff
end

それ以外のUser.authenticate(name,password)

于 2012-05-22T02:14:42.967 に答える