2012-01-15 3 views
0

lib 폴더 내에 sampler.rb 라이브러리 파일을 새로 만들었습니다. 나는 application_controller에 포함하고 config\initializers에서 필요로 문을 추가 한레일에서 컨트롤러의 라이브러리 파일에 액세스 할 수 없습니다.

module Sampler 
    def sample_tester 
     "test" 
    end 
end 

파일의 내용으로 이것을 고려하십시오. 컨트롤러에서 sample_tester 메서드에 액세스하려고하면 다음 오류가 발생합니다.

undefined local variable or method `sample_tester` for #<BlogsController:0xb8fbac8> 

누락 된 항목이 있습니까?

+0

가 대신 클래스 메소드로 정의해야합니까 : – jstim

+0

이니셜 라이저의 코드와 컨트롤러의 사용 부분을 추가하십시오. – phoet

답변

1

이 인스턴스를 생성하는 것처럼 보이지 않으므로 내 생각에 클래스 메서드로 정의해야이 값을 Sampler.sample_tester이라고 부를 수 있습니다.

은 파일에서 당신은 한 두 가지 방법으로 할 수 있습니다 : 당신은 클래스 메소드를 정의하려면

# first way 
module Sampler 
    def self.sample_tester 
    "test" 
    end 
end 

# second way 
module Sampler 
    class << self 
    def sample_tester 
     "test" 
    end 
end 

두 번째 방법은 좋네요.

module Mod 
    def bla 
    puts "bla" 
    end 
end 

class String 
    include Mod 
end 

String.bla rescue puts $! # => undefined method `bla' for String:Class 

class String 
    extend Mod 
end 

puts String.bla # => bla 
1

당신이 원하는 경우

은 모듈의 방법을 사용하면 확장 대신 포함 사용해야하는 클래스 메소드로 정의 하는가? self.sample_tester?
+0

라이브러리 파일 (/ lib 폴더 안에있는 파일)을 레일에 정확히 사용하는 방법을 설명하는 링크가 있습니까? – Rahul

+0

다른 루비 파일처럼 사용할 수 있습니다. lib 폴더를 autoload-path에 추가하면 각 요청에 대해 레일스가 자동으로로드합니다. stuf를 이니셜 라이저에 넣으면 초기화시에만 다시로드됩니다. http://guides.rubyonrails.org/initialization.html – phoet

관련 문제