2013-04-02 5 views
1

색인보기에 사용자 객체 목록이 있습니다. 각 사용자에 대해, 나는과 같이 사용자를 편집하기위한 LINK_TO 호출로 이름을 표시하고있다 : I (예를 들어 직원, 관리자 등) 사용자 역할 속성에 따라 다른 편집 경로를 사용할레일즈 - 객체 값을 기준으로하는 경로

<% @users.each do |u| %> 
    <%= link_to u.name, edit_user_path(u) %><br/> 
<% end %> 

. 내 경로에는 edit_employee_path, edit_manager_path 등이 있습니다.

동적으로 두 번째 매개 변수를 link_to으로 결정하는 가장 좋은 방법은 무엇입니까? 추악한 if/else 코드로이 코드를 해킹 할 수 있지만 가장 관용적 인 레일 방식으로하고 싶습니다.

+0

컨트롤러를 지정하고 라우팅하려는 위치에 대한 작업을 무엇입니까? –

답변

2

당신은에 도우미 모듈을 사용할 수있는 방법 실행할 * _path 메소드를 판별하십시오. 예를 들면 :

module UsersHelper 
    def edit_url(user) 
    case user.role 
    when :employee 
     employee_edit_path(user) 
    when :manager 
     manager_edit_path(user) 
    else 
     edit_user_path(user) 
    end 
    end 
end 

경로 방법이 매우 일관성있는 방법으로 이름을하는 경우와 같은, 동적으로 구성 메소드를 호출 할 수 있습니다

<%= link_to u.name, send(:"#{u.role}_user_edit_path", u) %><br/> 

하지만 당신이 필요할 것 적절한 이름을 가진 메소드가 항상 존재하는지주의하십시오.

+1

나는 당신이 얼마나 조심스럽게되어야 하는지를 모른다. 유효성 검사는 경로 도우미가 지원하지 않는 값을 포함하는 '역할'을 방지해야합니다. 나는 신중히 생각한다. – meagar

+0

그래, 처음부터 유효성 검사를하는 것이 "주의를 기울이십시오"여기에 있다고 생각할 수 있습니다. –

+0

정확히 내가 필요한 것은 스튜어트 M. 감사합니다! – andrunix

5

도우미 메서드에 대한

users_helper 또는 원하는

def edit_path_by_type(user) 
    user.role == "Employee" ? edit_employee_path(user) : edit_manager_path(user) 
end 

의 다른 도우미가 될 수 있습니다 당신과 당신의보기에서

<%= link_to u.name, edit_path_by_type(u) %> 
+0

감사합니다. 이것은 매우 도움이됩니다. – andrunix

관련 문제