首页 > 解决方案 > Ruby on Rails 5 随机 NameError:控制台中命名空间模型上的未初始化常量

问题描述

我在app/models/admin文件夹中有这两个命名空间模型:

交易类型.rb:

module Admin
  class TransactionType < ApplicationRecord
    self.table_name = "transactiontypes"

    has_many :transactions
  end
end

交易.rb:

module Admin
  class Transaction < ApplicationRecord
    self.table_name = "transactions"

    belongs_to :transactiontype
  end
end

schema.rb中,表定义如下所示:

  create_table "transactiontypes", force: :cascade do |t|
    t.string "description", limit: 30, null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

create_table "transactions", force: :cascade do |t|
    t.string "description", limit: 30, null: false
    t.bigint "transactiontype_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

add_foreign_key "transactions", "transactiontypes"

现在,如果我打开 rails 控制台并输入:

Admin::TransactionType.all

我收到此错误:

NameError: 未初始化的常量 Admin::TransactionType

奇怪的是,过去一个小时我一直在打开和关闭控制台,有时它可以正常工作(在控制台中显示正确的“SELECT”),有时它会收到 NameError 消息。然后我发出了一个rails restart命令,从那时起,我一直收到 NameError。

我会很感激任何帮助,谢谢。

标签: ruby-on-railsactiverecordruby-on-rails-5rails-activerecord

解决方案


检查您的 schema.rb,这里的模型名称是transactiontypesand transactions。所以你不需要在self.table_name = "transactiontypes"andself.table_name = "transactions"上添加transactiontypes.rband transactions.rb。而不是这只是更改app/models/admin文件夹:

交易类型.rb:

module Admin
  class Transactiontype < ApplicationRecord
    has_many :transactions
  end
end

交易.rb:

module Admin
  class Transaction < ApplicationRecord
    belongs_to :transactiontype
  end
end

现在您可以在 Rails 控制台上尝试:

Admin::Transactiontype.all

推荐阅读