2011-01-12 6 views
4

도우미 함수에 전달 된 매개 변수를 기반으로 link_to을 생성하는 도우미 함수 (예 : application_helper.rb)를 만들려고합니다. 내가 ERB의 링크를 넣어 한 경우는 형식이 될 것 파일 : 헬퍼 기능에서 레일 뷰 도우미 함수 및 link_to 함수

<%= link_to 'Some Text', { :controller => 'a_controller', :action => 'an_action' } %> 

는 텍스트, 컨트롤러와 액션 모두에 전달되거나 계산된다. 그러나 매개 변수가 그대로 params 문자열의 내용이며,

params = "{ :controller => '#{controller}', :action => '#{action_to_take}'}" 
html = "#{link_to some_text, params }<p />" 
return html 

올바른 텍스트가 생성 된 링크 : 도우미 함수의 코드입니다.

params 문자열을 평가하려면 어떻게해야합니까? (ERB 파일에있는대로)?

+0

가 PARAMS 문자열이 당신이 평가하려는에서 오는? –

답변

10

나는 머리가 복잡해진다 고 생각합니다. 당신은 매우 이상한 (그리고 권할 수) 일을하려고하지 않는 한이 작동합니다 : 비록

def link_helper text, controller, action 
    link_to text, :controller => controller, :action => action 
end 

을, 당신이 그것을 헬퍼 만드는 가치가 없어 볼 수 - 그것은 포장있어 기능보다는 거의 더 간단합니다, 유연성이 훨씬 떨어진다.

는 LINK_TO 도우미는 문자열을 반환합니다, 그래서 당신이 원하는 방법으로 사용하는 것은 매우 간단합니다 : 도우미 url_for

def link_helper text 
    # some helper logic: 
    controller = @controller || "pages" 
    action  = @action  || "index" 

    # create the html string: 
    html = "A link to the #{controller}##{action} action:" 
    html << link_to(text, :controller => controller, :action => action) 
    html # ruby does not require explicit returns 
end 
+0

감사합니다. 그것은 내가해야 할 일이 link_to를 반환하는 것이었지만 그 방법을 게시하기 위해 편집 한 것입니다. link_to는 도우미가 만드는 더 큰 HTML 조각의 마지막 부분이므로 HTML 변수에 추가하는 이유입니다. 또한 컨트롤러와 액션의 값은 헬퍼의 다른 로직에 따라 다릅니다. – Paul

+0

오케이, 나는 당신이하고 싶은 소리의 예를 들어 보았습니다. – gunn

+0

완벽한, 감사합니다. – Paul

0

당신은 할 수 간단한 사용.

LINK_TO "일부 텍스트", url_for (: 행동 => : ACTION_NAME : 컨트롤러 => : controller_name)

+0

확실히 할 수는 있지만 무의미합니다. link_to는 내부적으로 url_for를 호출하므로이 기능은 'link_to'Some Text ', : action => : action_name, : controller => : controller_name'과 동일합니다. – gunn