0

セッションコントローラで、「。find_by_email(params [:email])」を.where(email:params [:email])に置き換え、Railsに組み込まれているhas_secure_passwordでパスワードを検証しようとして失敗しました。前者は機能しますが、後者はキャッチされた例外になります。

undefined method `authenticate' for #<ActiveRecord::Relation:0x0000010384e690>

これは、機能しないコントローラーの完全なコードです。

class SessionsController <ApplicationController def new end

def create
  user = User.where(email: params[:email])
  if user && user.authenticate(params[:password])
    session[:user_id] = user.id
    redirect_to texts_path, notice: "Logged in!"
  else
    render "new"
  end
end

終わり

4

2 に答える 2

1

はクラスauthenticateのインスタンスメソッドですが、このメソッドについて知らないActiveRecord::Relation内のこれらのオブジェクトの品揃えを返します。そのコードは、単一のUserオブジェクトを返すため、以前はメソッドで機能していました。修正するには、次の行を変更できます。Userwherefind_by_email

user = User.where(email: params[:email])

に:

user = User.where(email: params[:email]).first
于 2013-02-21T19:23:25.020 に答える
1

非常に小さな変更を加えるだけで済みます

user = User.where(email: params[:email]).first

Cyleが述べたように、whereによって返される配列ではなく、単一の要素が必要です。

于 2013-02-21T19:26:09.353 に答える