NameError: неинициализированная константа ApplicationRecord - PullRequest
1 голос
/ 25 апреля 2019

Я получаю вышеуказанную ошибку, но я считаю, что я использую рельсы 5:

turlingdrome$ rails -v
/Users/brianp/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/railties-5.2.3/lib/rails/app_loader.rb:53: warning: Insecure world writable dir /Users/brianp/work in PATH, mode 040777
Rails 5.2.0

turlingdrome$ rake db:migrate
rake aborted!
NameError: uninitialized constant ApplicationRecord
/Users/brianp/work/online-reporting/app/models/client.rb:1:in `<top (required)>'
/Users/brianp/work/online-reporting/config/routes.rb:7:in `block in <top (required)>'
/Users/brianp/work/online-reporting/config/routes.rb:1:in `<top (required)>'
/Users/brianp/work/online-reporting/config/environment.rb:5:in `<top (required)>'
Tasks: TOP => db:migrate => db:load_config => environment
(See full trace by running task with --trace)

Я не думаю, что --trace полезен ... но может прикрепить его при желании ...

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

У вас есть два варианта, вы можете изменить app/models/client.rb объявление класса на:

class Client < ActiveRecord::Base

Или вы можете создать файл app/models/application_record.rb с содержанием:

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end
0 голосов
/ 26 апреля 2019

До версии 5 Rails генерировал модели, унаследованные от ActiveRecord::Base.

# rails g model foo.
class Foo < ActiveRecord::Base

end

В Rails 5 введено ApplicationRecord, что является моделью, эквивалентной ApplicationController. Итак, на Rails 5 генерируется следующее:

# rails g model foo.
class Foo < ApplicationRecord

end

Сам класс ApplicationRecord генерируется при запуске rails new.

Однако в этом нет ничего волшебного - это просто суперкласс, заложенный в конвенциях.

# app/models/application_record.rb
class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end

Если вы получаете NameError: uninitialized constant ApplicationRecord, вы либо обновились до Rails 5, не создавая его, либо удалили его по ошибке. Решение состоит в том, чтобы просто создать файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...