4

Я работаю на рельсах учебника книги онлайн, и я получаю следующее сообщение об ошибке, когда я иду в http://localhost:3000/неинициализированные постоянная ApplicationRecord

«неинициализированная постоянная ApplicationRecord»

и это дает мне следующий код, выделяющий первую строку.

class User < ApplicationRecord 
 
    attr_accessor :remember_token 
 
    before_save { self.email = email.downcase } 
 
    validates :name, presence: true, length: { maximum: 50 } 
 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
 
    validates :email, presence: true, length: { maximum: 255 },

Вот мой application.html.erb файл:

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
    <title><%= full_title(yield(:title)) %></title> 
 
    <%= stylesheet_link_tag "application", media: "all", 
 
              "data-turbolinks-track" => true %> 
 
    <%= javascript_include_tag "application", "data-turbolinks-track" => true %> 
 
    <%= csrf_meta_tags %> 
 
    <%= render 'layouts/shim' %> 
 
    </head> 
 
    <body> 
 
    <%= render 'layouts/header' %> 
 
    <div class="container"> 
 
     <% flash.each do |message_type, message| %> 
 
     <div class="alert alert-<%= message_type %>"><%= message %></div> 
 
     <% end %> 
 
     <%= yield %> 
 
     <%= render 'layouts/footer' %> 
 
     <%= debug(params) if Rails.env.development? %> 
 
    </div> 
 
    </body> 
 
</html>

И мой user.rb файл:

class User < ApplicationRecord 
 
    attr_accessor :remember_token 
 
    before_save { self.email = email.downcase } 
 
    validates :name, presence: true, length: { maximum: 50 } 
 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
 
    validates :email, presence: true, length: { maximum: 255 }, 
 
        format: { with: VALID_EMAIL_REGEX }, 
 
        uniqueness: { case_sensitive: false } 
 
    has_secure_password 
 
    validates :password, presence: true, length: { minimum: 6 } 
 

 
    # Returns the hash digest of the given string. 
 
    def User.digest(string) 
 
    cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : 
 
                BCrypt::Engine.cost 
 
    BCrypt::Password.create(string, cost: cost) 
 
    end 
 

 
    # Returns a random token. 
 
    def User.new_token 
 
    SecureRandom.urlsafe_base64 
 
    end 
 

 
    # Remembers a user in the database for use in persistent sessions. 
 
    def remember 
 
    self.remember_token = User.new_token 
 
    update_attribute(:remember_digest, User.digest(remember_token)) 
 
    end 
 

 
    # Returns true if the given token matches the digest. 
 
    def authenticated?(remember_token) 
 
    return false if remember_digest.nil? 
 
    BCrypt::Password.new(remember_digest).is_password?(remember_token) 
 
    end 
 

 
    # Forgets a user. 
 
    def forget 
 
    update_attribute(:remember_digest, nil) 
 
    end 
 
end

+0

могли бы вы проверить наличие 'приложение/модель/application_record.rb'? – oreoluwa

+0

У меня нет файла application_record.rb, у меня его есть? –

+0

Запись приложения предназначена только для рельсов 5. Вы управляете расами 5? –

ответ

10

Похоже, что вы используете Rails 5 учебника, но работать с Rails 4. В Rails 5 все модели наследуют от ApplicationRecord, в то время как Rails 4 из ActiveRecord::Base

Немедленное исправление:

class User < ActiveRecord::Base 
... 
end 

Длительное фикс, переключиться на рельсы 5 и научиться с Rails 5

2

Ссылаясь на ответ заваренного от https://stackoverflow.com/a/41388844/5598043

Создать новый файл с именем приложения/модели/application_record.rb со следующим содержанием:

класс ApplicationRecord < ActiveRecord :: Base self.abstract_class = истина конец

Смежные вопросы