1

我有一个带有最新 Rails 和 ruby​​ 的 Rails 引擎。

我有一个名为 cms 的控制器,带有一个名为 update 的操作。我使用此更新操作来更新不同的表。例如,我有一个名为 setting 的表。这种技术在普通的 Rails 应用程序中运行良好,但在我的 Rails 引擎中它会抛出这个错误:

NameError (uninitialized constant Setting):

我有一个名为 Setting 的模型,为什么给我一个错误?

4

1 回答 1

2

文件命名对于自动加载工作很重要。应用程序和引擎中的命名约定是相同的。事实上,应用程序就是一个引擎。

所以,my_rails_app/app/models/cms/setting.rb等价于my_engine/app/models/cms/setting.rb

如果您仍然遇到问题,请尝试使用显式命名空间访问常量Cms::Setting

您可以通过执行从适当的命名空间动态获取常量

Cms.const_get(table.capitalize)

但是,请谨慎使用这种方法,因为黑客可以向您发送任何内容,从而访问任何常量。

于 2012-10-12T10:17:24.960 回答