2012-03-15 64 views
0

我都命名空间控制器和模型是这样的:撤销模型命名空间导致错误

控制器:模块::保险 模式:模块::保险

这工作得很好,但我想删除的名称空间模型恢复正常,但保留名称空间控制器。我删除了模型中的所有对“Modules ::”的引用,并将控制器中的所有activerecord查询都删除到模型中。当我访问该网页时,返回此错误:

Expected /***/app/models/modules/ins_insurance.rb to define Modules::InsInsurance 

我应该怎么做,以去除名称空间的模式?

回答

0

错误的根本原因是轨道期待文件modules/ins_insurance.rb内声明的是Modules::InsInsurance类的名称 - 文件名必须与类名拜变形器的underscoreclassify方法匹配(略转换后:http://apidock.com/rails/ActiveSupport/Inflector/underscore)。所以将文件命名为insurance.rb,你应该没问题。

在一个更广泛的主题上,我只能认为你会迟早会遇到一个名为modules的子目录 - 至少它在Ruby关键字Module之间造成混淆。如果您正在寻找放置通用代码的地方,请根据需要使用app/lib,然后使用require该文件。命名空间是一件很好的事情,但除非你遵循这个流程,否则你最终会与Rails战斗。 (经验教训很难;-)

+0

谢谢,但我想摆脱“Modules ::”的一部分,因为它不再是一个命名空间。模块路径现在作为autoload_path加载到application.rb中。所以我想我可以删除模型中所有对Modules ::的引用。 – John 2012-03-16 07:46:23

+0

不是。类名和文件路径和名称在Rails世界中绑定在一起......它实际上是框架的许多许多特性的基础,虽然有时会有点不透明,但它们使得Rails中的编码看起来很神奇。如果你仍然沿着“Rails方式”倾斜的道路前进,也许你可以在这里问另一个问题,问“我想要X来完成Y.这是一个好主意,什么是最好的如何做到这一点?“。 Lotsa ninjas在这里很乐意提供帮助。 – 2012-03-16 12:09:18