代码之家  ›  专栏  ›  技术社区  ›  Eduardo Álvarez

RubyonRails 5随机名称错误:控制台中命名空间模型上的未初始化常量

  •  0
  • Eduardo Álvarez  · 技术社区  · 6 年前

    我在 应用程序/型号/管理员 文件夹:

    transactiontype。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
    

    在…内 架构。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控制台并键入:

    管理::TransactionType。全部的

    我收到以下错误:

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

    奇怪的是,在过去的一个小时里,我一直在打开和关闭控制台,有时它工作正常(在控制台中显示正确的“SELECT”),有时它会收到NameError消息。然后我发布了 rails重新启动 从那以后,我一直都有名字错误。

    如果有任何帮助,我将不胜感激,谢谢。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Sovalina    6 年前

    根据 Naming Convention ,则创建表 transactiontypes 不带下划线。

    因此Rails尝试在db中找到模型 Admin::Transactiontype 而不是 Admin::TransactionType

        2
  •  0
  •   Rasna Shakya    6 年前

    检查您的架构。rb,这里的型号名称是 transactiontypes transactions .所以您不需要添加 self.table_name = "transactiontypes" self.table_name = "transactions" 在…上 transactiontypes.rb transactions.rb .而不仅仅是改变 应用程序/型号/管理员 文件夹:

    transactiontype。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