2012-04-25 2 views
2

그래서 나는 많은 기능을 공유하는 다른 컨트롤러를 가지고 있으며 그 사이에 비슷한 기능을 공유하는 방법이 있는지 궁금합니다.다른 컨트롤러 용 레일 부분

예를이를 위해 : 컨트롤러간에 만 변경이 대상이다

= link_to 'Edit', dvd_path(dvd), :class => 'btn' 

대신 DVD의, 책이나 게임이 될 것입니다. 그래서 각 컨트롤러를 다시 작성하지 않고 해당 컨트롤러의 올바른 경로를 사용하는 부분을 만드는 방법이 필요하다고 생각합니다. 그리고 그 물건을 보낼 필요없이.

아이디어를 제공해 주시면 감사하겠습니다.

편집

@defaye : 난 할 노력하고있어 나는 위가 7 정도 다른 컨트롤러에 적용하는 코드를 재사용 할 수 있습니다. 위 코드는 링크와 경로가 항상 동일하고 변경되는 유일한 방법은 dvd_path (dvd)가 book_path (book)이되는 것입니다.

가장 간단한 방법을 원합니다. , 그것을하는 더 직접적인 방법.

사실, 지금은 비슷한 컨트롤러이기 때문에 여러 컨트롤러를 처리하는 동일한보기를 사용할 수 있는지 궁금합니다. 이것은 환상적 일 것입니다!

감사합니다.

+1

난 당신이 죄송 – Jonathan

답변

0

코드가 단지 몇 가지 방법 일 경우 전혀 부분적으로 적용 할 필요가 없습니다. 도우미가 도와 줄 수 있습니다.

다음은 예입니다. ApplicationHelper에서 정의 할 수 있습니다.

# application_helper.rb 
def link_to_edit(object) 
    link_to('Edit', polymorphic_path(object, :action => 'edit'), :class => 'btn') 
end 

그리고보기에

= link_to_edit(object) 
+0

(나는이 질문을 읽고 이해하는 것과) 당신이 이미 알고있는 것을 제안하고 너무 유혹 그렇지 않으면 피하기 위해 원하는에 추가해야한다고 생각 이전 게시물, 나는'module ApplicationHelper'를 파일 상단에 포함시켜야한다는 것을 몰랐습니다. 이제 작동합니다. – kakubei

+0

호기심에서 벗어나 명시 적으로 객체를 보내지 않고도이를 수행 할 수있는 방법이 있습니까? 수업 자체를 알아야하지 않습니까? – kakubei

+0

또한이 동작은 작동하지 않습니다 :'url_for (: id => object, : action => 'destroy')'this : games/: id로 변환하고 대신'show' 액션을 호출하십시오. 'destroy' 액션을 호출하는 올바른 방법은 무엇입니까? 감사. – kakubei