我在命名空间“Module”中创建了一个名为“RandomStuff”的模型..但是当我在rails控制台中尝试Module::RandomStuff
时。它给出了以下错误
Module :: RandomStuff(表不存在)
并且无法在我的rails应用中的任何位置访问它。当我在irb中运行ActiveRecord::Base.connection.tables
表中列出了“module_random_stuffs”..
以下是我遵循的步骤,如果我遗漏了某些内容,请告诉我
rails generate model Module::RandomStuff
然后在迁移文件中添加了一列
class CreateModuleRandomStuffs < ActiveRecord::Migration
def change
create_table :module_random_stuffs do |t|
t.string :test_column
t.timestamps null: false
end
end
end
然后运行以下命令
rake db:migrate
仍然我无法访问任何地方的模型..
答案 0 :(得分:1)
感谢@DVG指出它。
我的模型Modul :: RandomStuff
中缺少以下行 self.table_name = 'module_random_stuffs'
答案 1 :(得分:1)
有时,当Rails无法加载某些内容时,就好像某些内容 从未存在。如果出于某种原因,某些常量(至少是类或模块,我已经看到它们)在其定义中有错误,但是因为它是可选的,所以不会抛出任何错误。
使用active_model_serializers
时,我遇到了同样的问题。它试图从模型的名称推断出一个序列化器类。如果找不到匹配的那个,它会回到&#34; serializerless&#34;渲染。这使我困惑了一秒钟,我很确定我已经定义了它,即使是在正确的文件中。
在您的特定情况下,Rails必须定义一个名为Module
的模块,以便在那里指定一个公共表前缀。像这样:
module Module
def self.table_name_prefix
'module_'
end
end
但是尝试在Module
中定义模块irb
, Ruby会拒绝:
module Module
end
# TypeError: Module is not a module
它不是一个模块?呵呵。那是什么?
Module.class
# => Class
一堂课?这是对的,而且,它是Ruby core class。所以只需选择一个不同的模块名称。你选择的东西与真正必要的东西相撞。
您可以通过更改生成的module.rb
,将module
替换为class
来解决此问题。这将重新打开Module
类并在其中定义您的模型,使事情按预期工作。但从技术上讲,这是一个绝对不必要的monkeypatch。