0
コンテキスト - 私は、https://www.youtube.com/watch?v=Hw6WtWJwRtUの行ごとの指示に従って、簡単な認証を作成しています。これまでに完了しRuby On Rails - ActiveRecordのための未定義メソッド `has_secure_password ':Module
ステップ -
- ユーザー表を作成しました。テーブルには列は、ユーザ名を取得するために形成した新しい方法「を作成」を作成し、gemfileおよび実行バンドルのコントローラセッションを作成し
- をインストール中に「has_secure_password」
- コメントを外しbcryptの言及Userモデルでは
- をuser_nameとpassword_digestしており、パスワード。
エラー - ログインフォームにユーザー名とpassowrdを入力する際にエラーが発生しました。メソッドが定義されていません。
手順を修正するためにこれまで取ら - 1.テーブルスキーマをチェック、テーブルは、列password_digestを有し、列タイプは、VARCHAR 2宝石のリストである - bcryptのがインストールされていることを言及しています。私はレールサーバーを閉じて、再び再起動しました。
スニペットを見つけてください -
ユーザーモデル -
class User < ActiveRecord::
attr_accessible :user_name, :password
has_secure_password
belongs_to :UserType
def find_by_name(name)
user = User.find_by(user_name: name)
end
end
セッションコントローラ -
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_name(params[:user_name])
if user && user.authenticate(params[:password])
session[:user_id] = user.id
redirect_to root_url, notice: "Logged In"
else
flash.now.alert = "Email or password is invalid"
render new
end
end
end
セッションビュー -
<h1>Log In</h1>
<%= form_tag sessions_path do %>
<div class="field">
<%= label_tag :user_name %>
<%= text_field_tag :user_name, params[:user_name] %>
</div>
<div class="field">
<%= label_tag :password %>
<%= password_field_tag :password %>
</div>
<div class="action"><%= submit_tag "Log In" %></div>
<%end%>
usersテーブル -
CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user_name" varchar, "password_digest" varchar, "UserType_id" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);
CREATE INDEX "index_users_on_UserType_id" ON "users" ("UserType_id");
ルート -
Rails.application.routes.draw do
resources :sessions
resources :feedback_details
resources :users
resources :meetings
resources :user_types
root 'sessions#new'
エラーログ -
Started POST "/sessions" for 127.0.0.1 at 2017-01-29 14:24:43 +0530
Processing by SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"BvROFNObaYS/8Fq8wjTLwh6DiWo5rcLNnfvpdhlxgD2vhEmx2ErXWJRA8ku6bHYBRZ8W2imI2N/+SMMlnuWz+w==", "user_name"=>"tushar", "password"=>"[FILTERED]", "commit"=>"Log In"}
Completed 500 Internal Server Error in 24ms (ActiveRecord: 0.0ms)
NoMethodError (undefined method `has_secure_password' for ActiveRecord:Module):
app/models/user.rb:2:in `<top (required)>'
app/controllers/sessions_controller.rb:6:in `create'
Rendered /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/templates/rescues/_source.erb (8.6ms)
Rendered /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/templates/rescues/_trace.html.erb (4.0ms)
Rendered /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.8ms)
Rendered /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (31.6ms)
Rendered /var/lib/gems/2.3.0/gems/web-console-2.3.0/lib/web_console/templates/_markup.html.erb (0.7ms)
Rendered /var/lib/gems/2.3.0/gems/web-console-2.3.0/lib/web_console/templates/_inner_console_markup.html.erb within layouts/inlined_string (0.6ms)
Rendered /var/lib/gems/2.3.0/gems/web-console-2.3.0/lib/web_console/templates/_prompt_box_markup.html.erb within layouts/inlined_string (0.6ms)
Rendered /var/lib/gems/2.3.0/gems/web-console-2.3.0/lib/web_console/templates/style.css.erb within layouts/inlined_string (0.6ms)
Rendered /var/lib/gems/2.3.0/gems/web-console-2.3.0/lib/web_console/templates/console.js.erb within layouts/javascript (25.3ms)
Rendered /var/lib/gems/2.3.0/gems/web-console-2.3.0/lib/web_console/templates/main.js.erb within layouts/javascript (0.6ms)
Rendered /var/lib/gems/2.3.0/gems/web-console-2.3.0/lib/web_console/templates/error_page.js.erb within layouts/javascript (0.8ms)
Rendered /var/lib/gems/2.3.0/gems/web-console-2.3.0/lib/web_console/templates/index.html.erb (51.1ms)
私はより多くの情報を提供する必要がある場合、私に知らせてください。
'class User
@HassaninAhmed、私はすべての間違った場所を見ていました。ありがとうございました! –
心配しないでください:D私はそれを答えに変換できますか? –