【问题标题】:Capital Letters in Mongoid Model (Rails) getting errorsMongoid 模型(Rails)中的大写字母出现错误
【发布时间】:2015-07-08 17:42:11
【问题描述】:

我在 mongoid ATSJob 中创建了一个模型,但是每当我在任何地方调用它时,它都会给我一个:

uninitialized constant name_of_current_file::ATSJob

我认为在模型名称中包含多个大写字母是有问题的,但我不知道如何将其修复为我想要的。

为了进一步澄清,当我在模型中将名称改回 Atsjob 时,它可以工作。

谢谢!

【问题讨论】:

  • 我认为这不是型号名称的问题。您的模型似乎不在加载路径中,因此是“未初始化的常量”。您是否将此模型放在 app/models 目录中? +1
  • 是的,抱歉让我澄清一下
  • 实际文件名是什么? Rails 有一个约定,文件名必须与常量名匹配。
  • 名称是 atsjob.rb
  • 下面的答案对你有用吗?

标签: ruby-on-rails model mongoid


【解决方案1】:

Rails 有一个约定,模型必须是表名的单数形式,并且文件名必须与常量名匹配。如果您有一个名为 atsjobs 的表,那么您的模型名称是 Atsjob,它应该位于一个名为 atsjob.rb 的文件中。现在,如果你想让它变成驼峰式,那么你将创建一个名为AtsJob 的模型,它将存在于一个名为ats_job.rb 的文件中(注意下划线)。文件名与模型名有约定。因此,每个大写字母都应该有一个下划线。

因此,在您的情况下,请尝试以下文件名:

a_t_s_job.rb

也就是说,我会使用驼峰法而不是这种方法。像 AtsJob.rb 这样的东西更传统。

【讨论】:

  • 我如何让它成为 ATSJob?
【解决方案2】:

如果您想使用名称 ATSJob 而不是 AtsJob,您可以在 ActiveSupport Inflector 中添加“ATS”作为首字母缩写词。在 config/initializers 文件夹中应该已经有一个名为“inflections.rb”的初始化程序。使用以下内容修改或创建此文件:

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym 'ATS'
end

更多关于 Inflector 的信息在这里: http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    相关资源
    最近更新 更多