2013-09-25 2 views
0

레일즈 헬퍼를 리팩터링하고 빵 부스러기 및 탐색 메뉴 로직을 별도의 클래스로 이동하려고합니다. 하지만이 수업에서는 params, 해시 등을 사용할 수 없습니다. 다른 클래스 사이에서 매개 변수를 전달하는 것은 좋지 않은 생각입니다. 어떻게 피할 수 있습니까? 예를 들어
나는이 :Rails 헬퍼 클래스에서 매개 변수 전달

module NavigationHelper 

    def nav_item(name, path, inactive = false) 
    NavItem.new(params, name, path, inactive).render 
    end 

    class NavItem 
    include ActionView::Helpers 
    include Haml::Helpers 

    def initialize(params, name, path, inactive) 
     init_haml_helpers 
     @params = params 
     @name  = name 
     @path  = path 
     @inactive = inactive 
    end 

    def render 
     capture_haml do 
     haml_tag :li, item_class do 
      haml_concat link_to @name, @path 
     end 
     end 
    end 

    def item_class 
     klass = {class: 'active'} if active? 
     klass = {class: 'inactive'} if @inactive 
     klass 
    end 

    # Class of the current page 
    def active? 
     slug = @path.gsub /\//, '' 
     @params[:page] == slug || @params[:category] == slug 
    end 
    end 
end 
+0

그들은 의존성이며 종속성 관리는 까다로운 문제입니다. 이 방법은 해킹하지 말고, 메소드에서 args는 자신이 정말로 필요한 것을 생각하도록 강요합니다. – apneadiving

답변

0

내가 레일 ActionPack에서에 Params에 액세스 할 수있는 메커니즘을 제공합니다 생각하지 않습니다. 당신이 한 방식은 나에게 맞는 것 같습니다. 수업을 초기화하려면 적어도 한 번 params, 쿠키를 전달해야합니다.