【问题标题】:Rails, Custom Folders and NamespacesRails、自定义文件夹和命名空间
【发布时间】:2012-11-22 10:42:23
【问题描述】:

我正在运行 Rails 3.2.7,

我有一个文件夹'/app/jobs'

以及我的“config/application.rb”文件中的以下内容

config.autoload_paths += %W(#{Rails.root}/app/jobs)

一切都很好。

但是,如果我想命名我的类,例如

class Jobs::UpdateGameStatus
  #methods etc
end

而不是

class UpdateGameStatus
  #methods etc
end

然后我得到

未初始化的常量 Jobs (NameError)

这不是世界末日,但我很想知道为什么......

【问题讨论】:

  • app下的一切都是自动加载的,不需要在config中添加任何东西
  • 尝试添加以下内容:在/app/job/jobs.rb:模块工作;结束

标签: ruby-on-rails ruby


【解决方案1】:

我最终修复了它,我需要做的是用 Jobs 模块包装我的所有类。

我的文件位于“app/jobs”中

看起来像这样

module Jobs
  class JobName
    #methods etc
  end
end

这样使用

Jobs::JobName.method(args)

【讨论】:

  • class Jobs::JobName 确实有效,但前提是 module Jobs 已经在别处定义。所以你在这里展示的方法通常更好。
【解决方案2】:

我知道你已经解决了这个问题,而且这是旧的,但是在 ruby​​ 中,也可以直接使用 class Jobs::JobName 声明命名空间类。打字少了一点,并且达到了相同的结果。

编辑:正如@D-side 所指出的,必须已经定义了 Jobs。我自己使用它的代码基于 STI,它假定我正在扩展的前一个类/模块已经存在。

【讨论】:

  • i.imgur.com/tzVJXIB.png -- 那我是不是做错了什么?不适合我,Ruby 是最新的。
  • 我应该说它只有在 Jobs 已经定义的情况下才有效。我想我假设Jobs 已经是一个类或一个模块。感谢您指出这一点,@D-side。
  • 是的,请在你的回答中反映这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
相关资源
最近更新 更多