2017-11-05 1 views
0

파일을 lib/services/my_service.rb로 생성했습니다.레일 : 컨트롤러의 lib 폴더에서 사용자 정의 클래스로드

# /lib/services/my_service.rb 
class MyService 
... 
end 

나는 내가이면 MyService가 초기화되지 않은 상수 오류를 받고 있어요

class MyController < ApplicationController 
    def method 
      service = MyService.new() 
    end 

my_controller/응용 프로그램/컨트롤러에서 사용하고 싶습니다. 나는

require '/lib/services/my_service.rb' 

로 가져올 것을 시도했다 그러나 나는

cannot load such file -- /lib/services/my_service.rb 

편집을 받고 있어요 : 나는

config.autoload_paths << Rails.root.join('lib') 

하지만 주사위를 사용하여 application.rb에서 자동 로딩을 시도했습니다. 아직 일정 MyController에 ::이면 MyService을 초기화되지 않은하기

당신은 아마 lib/ 폴더에있는 파일에서 자동로드 설정해야합니다

답변

3

레일즈는 자동 로딩을 지원하는 몇 가지 명명 규칙이 있습니다.

모델/클래스 구조가 Services::MyService 인 경우 Rails가 lib/services/my_service.rb에있는 파일을 자동로드하는 경우.

service = Services::MyService.new 

레일즈 버전에 따라 당신에 lib 폴더를 추가해야 할 수도 있습니다 :

module Services 
    class MyService 
    # ... 
    end 
end 

그리고 컨트롤러에이 같은 클래스를 사용

lib/services/my_service.rb에 변경

파일 자동로드시 사용되는 폴더 목록 :

# add this line to your config/application.rb: 
config.autoload_paths << "#{Rails.root}/lib" 

autoloading에 대한 자세한 내용은 Rails 안내서를 참조하십시오.

+0

명시 적으로 요구하지 않고도이를 해결했습니다. 고마워. – JCDJulian

1

: 당신이 그것을 할 것을 선호하는 경우

# config/application.rb 
config.autoload_paths << "#{Rails.root}/lib" 

을 "수동으로"당신은 그러한 요구할 수있다 같은 파일에있는 파일 :

# config/application.rb 
require './lib/my_service' 

이 후 다시 시작해야합니다.

+0

는 이미 자동로드로 시도했다.여전히 초기화되지 않은 상수가된다. MyController :: MyService – JCDJulian

+0

'require './lib/my_service'로 시도하고 서버를 재시작한다. –

+1

require 문 시작 부분의 점과 같이 보입니다. 감사! – JCDJulian

0

config/application.rb에는 자동로드 할 파일이있는 디렉토리를 지정할 수있는 설정이 있습니다. application.rb 가입일

:

# Custom directories with classes and modules you want to be autoloadable. 
# config.autoload_paths += %W(#{config.root}/extras) 

또는

config.autoload_paths += Dir["#{config.root}/lib/**/"] 

레일 3

Dir["lib/**/*.rb"].each do |path| 
    require_dependency path 
end 
관련 문제