2013-08-21 5 views
0

디렉토리 :레일 응용 프로그램에서 클래스를 초기화 할 수 없습니다

프로토 타입

-app

-assets

welcome_controller.rb

-controllers

---

도메인 개체 의

--- 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 클래스는 "유틸리티"라는 별도의 디렉토리에 존재하며 어떤 이유로 "requires_relative"키워드를 사용하여 참조 할 필요조차 없습니다. 그것은 HTTParty를 포함하고 매번 외부 API에 대한 GET 요청을 성공적으로 수행하는 래퍼 클래스입니다. 누군가 내가 왜 겉으로보기에는 그것을 어디에서나 참조 할 필요가 없다고 설명 할 수 있습니까?

또는 SimilarJob 클래스를 초기화하려고 할 때마다 실패합니다. 오류 : 내가 여기 조사 것과 및 웹

uninitialized constant WelcomeController::SimilarJob 

, 이것은 내가 제대로 파일을 참조하고 있지 않다 의미한다. 이 문제를 테스트하기 위해 필자는 "requires_relative"문에서 이름을 잘못 지정하려고 시도했으며 프레임 워크가 요청한 파일을로드 할 수 없음을 알립니다. 그래서 레일스가 내 수업을 찾는 것처럼 보입니다. 그냥 어떤 이유로 초기화하지 않을 것입니다.

가장 신나는 부분은 SimilarJob을 약간 변경하고 서버를 다시 시작하면 갑자기 작동합니다. 서버를 중지했다가 다시 시작하면 다시 붙여 넣기 오류가 발생합니다.

이것은 .NET MVC 또는 KnockoutJS 이외의 다른 것을 처음으로 파고 들었습니다. 내 방식의 오류를 지적 하시겠습니까?

EDIT :이 컨트롤러에 대해 generate 명령을 사용 했으므로 모든보기와 경로가 적절하게 작동합니다. 사실 문제가되는 행을 주석 처리하면 JSON 응답의 마지막 행에서 참조하는 속성이 파일에 잘 표시됩니다.

EDIT v2 : 이상하게도 Jobs (한 단어)에 내 클래스 이름을 변경하면이 오류가 제거됩니다. 이 기괴한로 떨어져! 아무도 이것이 내 문제인지 확인할 수 있습니까?

답변

2

이름이 중요하며 파일의 이름을 잘못 지정했습니다. SimilarJob.rbsimilar_job.rb이어야합니다.

마찬가지로 API 파일은 api.rb으로 지정해야하며 정의 된 클래스는 Api이어야합니다. 레일스 컨벤션과 크게 다르다는 점에서이 점이 중요합니다.

+0

글쎄, 학습 == 고통. 감사! – sean

관련 문제