簡體   English   中英

NameError: 未初始化的常量 ApplicationRecord

[英]NameError: uninitialized constant ApplicationRecord

我收到上述錯誤,但我相信我使用的是 rails 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 沒有用...但如果需要可以附加它...

在版本 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,要么錯誤地將其刪除。 解決方案只是創建文件。

您有兩個選擇,您可以將app/models/client.rb類聲明更改為:

class Client < ActiveRecord::Base

或者,您可以創建一個包含以下內容的app/models/application_record.rb文件:

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM