2017-01-29 5 views
0

Контекст. Я создаю простую аутентификацию, следуя инструкциям по строке от https://www.youtube.com/watch?v=Hw6WtWJwRtU.Ruby On Rails - неопределенный метод `has_secure_password 'для ActiveRecord: Module

шаги завершены до сих пор -

  1. создал таблицу пользователя. В таблице есть столбцы user_name и password_digest
  2. В модели пользователя упоминается «has_secure_password»
  3. незакомментированной Bcrypt в Gemfile и выполняются пакет установки
  4. создал контроллер сеансов, создал новый метод «Create», который имеет форму, чтобы получить имя пользователя и пароль.

Ошибка - при вводе имени пользователя и 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 

Сессии Controller -

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 

Session View -

<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%> 

пользователей стол -

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' 

Error Log -

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) 

Пожалуйста, дайте мне знать, если мне нужно предоставить больше информации.

+2

'class User

+0

@HassaninAhmed, я смотрел на все неправильные места. Спасибо! –

+0

Не стоит беспокоиться: D Могу ли я преобразовать это в ответ? –

ответ

0

Здесь вам не хватает младшего кода.

class User < ActiveRecord::Base 
Смежные вопросы