我有一个位于命名空间中的 Rails 3.2.8 模型。我敢肯定,过去命名空间会自动扩展为表名的样子。例如 Module::Model 将成为数据库中的 module_model。
出于某种原因,我现在有一个问题,即这不会通过 rails 应用程序发生。迁移、模型和控制器都存在于命名空间中,但是当模型查找表时,它会忽略表前缀并抱怨找不到数据库。
这是示例
module Magazine
def self.table_name_prefix
'magazine_'
end
end
module Magazine
class Paper < ActiveRecord::Base
#some stuff here
end
end
当我在 Magazine::Paper 上进行查询时,它会查找表“paper”而不是它应该查找的“maganzine_paper”。这导致整个应用程序表现出一些奇怪的行为。我还尝试使用 self.table_name 在模型中手动设置表名,但这只会让模型找到正确的表。路线仍然和我玩游戏,因为当我在论文下面嵌套一些东西(例如评论)时,它会寻找一条不存在的路线。
这就是路线内部的内容。评论应该转到 /magazine/papers/1/comments 但它会寻找一条名为 /magazine/comments 的路线
namespace :magazine do
resources :papers do
resources :comments
end
end
到底是怎么回事?
更新:
好的,所以我想通了,但不确定是否应该忽略它或查看是什么原因造成的。引擎名称是杂志,在引擎中我为名为杂志的模型创建了一个命名空间,但这会导致问题。所以rails不能有一个类似于引擎名称的命名空间名称吗?