Ruby on rails RubyonRails模型不遵循命名空间

Ruby on rails RubyonRails模型不遵循命名空间,ruby-on-rails,Ruby On Rails,我有一个位于命名空间中的Rails 3.2.8模型。我敢肯定,以前名称空间会自动扩展为表名的样子。e、 Module::Model将成为数据库中的Module_模型 由于某种原因,我现在遇到了一个问题,这不是通过rails应用程序实现的。迁移、模型和控制器都位于一个名称空间中,但当模型查找表时,它会忽略表前缀,并抱怨找不到数据库 这是一个例子 module Magazine def self.table_name_prefix 'magazine_' end end modul

我有一个位于命名空间中的Rails 3.2.8模型。我敢肯定,以前名称空间会自动扩展为表名的样子。e、 Module::Model将成为数据库中的Module_模型

由于某种原因,我现在遇到了一个问题,这不是通过rails应用程序实现的。迁移、模型和控制器都位于一个名称空间中,但当模型查找表时,它会忽略表前缀,并抱怨找不到数据库

这是一个例子

module Magazine
  def self.table_name_prefix
    'magazine_'
  end
end

module Magazine
  class Paper < ActiveRecord::Base
    #some stuff here
  end
end
发生了什么事

更新:


好吧,我想出来了,但不确定我是否应该忽略它,或者看看是什么导致了它。引擎名是magazine,我在引擎中为模型创建了一个名为magazine的名称空间,但这会导致问题。所以rails不能有一个类似于引擎名的名称空间名称?

如果您只是编写

namespace :magazine do
 resources :papers do 
  resources :comments
 end
end
运行rake路由,你可以看到它正在寻找合适的URL,当你说它在寻找
/magazine/comments
时,你肯定在文件的某个地方写了另一条路由。 当你写作时

module Magazine
 def self.table_name_prefix
  'magazine_'
 end
end
当您使用相同的模块名
杂志
编写模型时,您就是在用不同的内容替换相同的模块。不要在杂志模块中写模型纸,只需按照以下方式将模块包含在模型纸中即可

class Paper < ActiveRecord::Base
  include Magazine
  #some stuff here
end
课堂论文

这将确保在应用程序启动时加载模型时调用表名称前缀方法。

我遇到了相同的问题,忘记了应用程序的名称(主模块)与模型的命名空间同名。更改模块名或应用程序名都可以解决此问题。

我仍然会遇到这样的问题,即它查找没有前缀的表名。这很奇怪,因为名称空间和前缀在rails 3.1中工作得非常好,请删除方法def self.table_name_prefix,只需编写这个self.table_name_prefix='magazine_',因为它是一个类变量,而不是一个类方法,使用self.table_name_prefix='magazine_',但是当访问页面时,它显示错误无法找到表'pages'我认为应该是“杂志页面”,所以我想出来了,但不确定我是否应该忽略它,或者看看是什么导致了它。引擎名是magazine,我在引擎中为模型创建了一个名为magazine的名称空间,但这会导致问题。所以rails不能有一个类似于引擎名的名称空间名称?我也有同样的问题。。。除了引擎之外,我将名称空间命名为gem中的模块。然后砰的一声…没起作用。。我移除了宝石,像个魔咒一样工作。。。把宝石放回去,碎了。。听起来rails有一些问题。在4.1.0.beta1I上创建了一个新的Rails项目并生成了一个模型,它的工作原理就像3.2.8中的魅力一样。你能提供你的
app/models
目录结构吗。我尝试过不使用数据库开关(默认的sqlite3)从头开始创建一个项目,它可以正常工作。我怀疑我把mysql版本搞砸了,或者它坏了。可能是前者。不过,感谢您到目前为止的所有评论。这显然是Rails的一个bug。这真的很可怕,一年后它还没有修好。也遇到了这个问题。当您的应用程序名为“Foo”时,则根本不加载app/models/Foo.rb(可能是因为已经定义了Foo类?)
class Paper < ActiveRecord::Base
  include Magazine
  #some stuff here
end