2010-03-02 2 views
1

두 클래스가 같은 클래스에 속해 있다고해도 컨트롤러에서 도우미를 사용할 수없는 것처럼 보입니다. 예를 들면 : XYZHelper 및 XYZController ...ruby ​​on ruby에서 도우미를 올바르게 사용하기

접두어가 동일한 "XYZ"이면 헬퍼의 메서드를 컨트롤러와 뷰에서 사용할 수 있지만 느낌이 들었습니다. 그렇지 않아.

컨트롤러에서 일반적인 기능을 제거하고 도우미에 넣으려면 어떻게해야합니까? 다른 컨트롤러가이 코드를 사용하고 있기 때문에 코드의 일부를 도우미에 넣고 싶습니다. 이것을 접근하는 가장 좋은 방법은 무엇입니까?

감사합니다. Jai.

답변

0

Pete의 지침을 따르십시오. 그래도 메서드를 노출하려면 다음을 수행하십시오.

ApplicationController 클래스에 메서드를 추가하고 helper_method을 호출하여 도우미 메서드로 메서드를 등록합니다.

class ApplicationController < ActionController::Base 

    helper_method :foo, :bar 

private 

    def foo 
    "foo" 
    end 

    def bar 
    "bar" 
    end 
end 
+0

도우미 메서드로 메서드를 추가하면 프로젝트의 도우미가 메서드를 사용할 수 있습니까? 감사. – iJK

+0

예, 'ApplicationController'에 추가하면됩니다. –

1

당신이 컨트롤러 사이에 코드를 공유 할 수있는 몇 가지 방법이 있습니다

  1. 응용 프로그램 컨트롤러 : 문제의 코드는 컨트롤러에 있어야한다고 액션/방법이 있지만,가 사용할 수있는 경우 여러 개의 컨트롤러 (또는 그 모두)가 있으면이 포트를 넣을 수 있습니다.

  2. 'lib'디렉토리. 공유되어야하는 코드를 넣기위한 일반적인 목적의 장소.

  3. 모델에 넣습니다. 이것은 적용 가능할 수도 있고 그렇지 않을 수도 있지만, 여러분이 움직이고 자하는 코드를 잘 살펴볼 가치가 있는지 여부는 모델에서 이해할 수있는 것인지 (lib의 컨트롤러 또는 무작위 클래스/모듈 대신) .

+0

답장을 보내 주셔서 감사합니다. 어떤 이유로 응용 프로그램 컨트롤러에 코드를 넣는 것이 더러운 것처럼 보입니다. 모델과 관련된 메소드가 있지만 컨트롤러와 애플리케이션 도우미의 메소드에서 동일한 메소드를 호출 할 수 있어야합니다. – iJK

관련 문제