无法在Rails应用程序中初始化类

时间:2013-08-21 22:52:37

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-2.0

目录:

原型

-app

-assets

-controllers

--- welcome_controller.rb

domainobjects

--- SimilarJob.rb

实用程序

- API.rb

控制器代码

require_relative '../domainobjects/SimilarJob'

class WelcomeController < ApplicationController
 def index
  foo = API.new('DEVKEY')
  res = foo.RetrieveFacts("Test", "Me")

  #newResult = SimilarJob.new("test") <-- Failing Line!!!

  render :text => res["Response"]["IsInternationalResponse"]
 end
end

对象代码

class SimilarJob
end

我删除了一些东西,但API类存在于一个单独的目录“Utilities”中,由于某种原因,我甚至不必使用“requires_relative”关键字来引用它。它是一个包含HTTParty的包装类,每次都会向我的外部API发出成功的GET请求。有人可以解释为什么我似乎不必在任何地方引用它吗?

或者,每次尝试初始化SimilarJob类都会失败。错误是:

uninitialized constant WelcomeController::SimilarJob

根据我在这里和网上研究的内容,这意味着我没有正确引用该文件。为了测试这一点,我尝试在“requires_relative”语句中错误地命名它,框架通知我无法加载所请求的文件。所以看起来Rails正在寻找我的课程,它不会因某种原因而初始化它。

最令人抓狂的部分是我会对SimilarJob进行一些小改动,重新启动我的服务器,它会突然发挥作用。如果我再次停止并启动服务器,则会回到下面粘贴的错误。

这是我第一次真正挖掘.NET MVC或KnockoutJS以外的其他东西。你们有没有想过指出我的方式错误?

编辑:我使用了此控制器的generate命令,因此所有视图和路径都能正常工作。事实上,如果我注释掉有问题的行,我在JSON响应的最后一行引用的属性就会很好地呈现给文件。

编辑v2:奇怪的是......将我的班级名称改为乔​​布斯(一个字)就是摆脱了这个错误。这很奇怪!任何人都可以确认这是我的问题吗?

1 个答案:

答案 0 :(得分:2)

名称很重要,而且您的文件命名错误。 SimilarJob.rb需要similar_job.rb

同样,您的API文件应该被称为api.rb,并且它定义的类应该被称为Api。这个东西很重要,因为你已经严重偏离了Rails惯例,并且正在为它而痛苦。