2011-08-11 9 views
0

나는 사용자가있는 곳 (실제로는 사용자가 누구인지, 프로필이 끝난 상태 등)에 따라 콘텐츠를 회전시키는 사이드 바를 가지고 있습니다.사용 된 라우팅에 따라 조건부로 사이드 바를 표시하는 방법?

내가 원하는 것은 현재 페이지의 컨트롤러, 작업 및 ID를 대조하는 도우미입니다.

  • 경우 제어기는 JobsController 동작이 show 또는 index이다 _sidebar_add_your_job 인 부분을 사용한다.
  • 경우 제어기는 UsersController 동작이 show 또는 index이다 _sidebar_add_your_cv 인 부분을 사용한다. app/helpers/sidebar_helper.rb에서

내 도우미의 단순화 된 버전입니다 : 내가 URL을 상대로 정규 expresssions 일치

module SidebarHelper 
    def sidebar_partial 
    if partial 
     return "sidebar_#{partial}" 
    end 
    end 

    # Determines what sidebar partial to render. 
    def partial 
    partial = nil 

    if ((section == :jobseekers) && current_user.nil?) 
     partial = :add_cv 
    elsif ((section == :employers) && current_user.nil?) 
     partial = :add_job 
    end 

    partial 
    end 

    def section url = nil 
    url = request.fullpath if url.nil? 

    section = nil 

    if (url == root_path || url.match(/^\/jobs/)) 
     section = :jobseekers 
    elsif (url.match(/^\/employer/) || url.match(/\/users\/[a-z0-9]+/)) 
     section = :employers 
    end 
    section 
    end 
end 

특히 마지막 부분은, 추한하고 꽤 많은 경우에 실패합니다. 가장 주목할만한 것은 : users/sign_in, users/sign_up` 등입니다. 나는이 예외의 전체적인 블랙리스트를 유지하기 시작하는 것을 꺼려한다. 그것은 너무 못 생기고 너무 단단히 경로에 연결되어 있다고 느낀다.

URL 또는 컨트롤러 & 조치와 현재 사용자의 역할 및 상태와 같은 몇 가지 간단한 조건에 따라 일부 조건부 부분 포함을 효과적으로 수행하려면 어떻게해야합니까?

도우미에서 현재 페이지/요청의 컨트롤러 및 동작에 대해 어떻게 테스트 할 수 있습니까?

+1

http://www.postal-code.com/mrhappy/blog/2007/01/을 확인하시기 바랍니다 18/rails-knowing-the-current-action-in-a-view/당신이 찾고있는 sth인지 알리십시오. – Bohdan

+0

기본적으로 regexp가 쉽게 개선 될 수 있도록/users/이후에 신경 쓰지 않아도됩니다. 또한 모든 뷰와 헬퍼에서 @controller 변수를 사용할 수 있어야합니다. – socjopata

+0

@Bohdan, 그게 실제로 내가 찾고있는 해결책입니다. 훨씬 더 쉽습니다. 대답으로 붙여 넣으면 받아 들일 수 있습니다. 고마워. – berkes

답변

1

당신이보기에 현재의 컨트롤러와 가능한 조치를 할 수있는 쉬운 방법을 찾을 수있을 this 게시물을 확인하시기 바랍니다

+1

링크가 작동하지 않습니다. – voondo

관련 문제