2012-06-19 2 views
4

Rails 3.1 앱에서 사전에 모르는 다양한 클래스의 오브젝트 (다형성 테이블에서)를 나열하고 싶습니다. 명명 된 경로가있는 리소스의 경우 해당 경로를 link_to 호출로 사용하고 싶습니다. 이러한 경로가 존재하는지 확인하지 않고 본래의 접근법은 (변명 HAML는) : 객체가 예를 들어 명명 된 경로를 (가없는 클래스 Foo의 인스턴스 인 경우가 아니기 때문에레일스 : 오브젝트에 명명 된 경로가 있는지 확인

%ul 
- @objects.each do |object| 
    %li= link_to object, url_for(object) 

이것은 undefined method 'foo_path' 오류가 발생합니다 리소스로 정의 됨). 객체 나 클래스에 대한 명명 된 경로의 존재를 확인하는 간단한 방법 (예 : 간단한 메서드 호출)이 있습니까?

편집 : 당신은 모델 객체를하지 않으려면 단지에 이름 경로없이 LINK_TO 호출에 구조를 추가 할 수

%ul 
- @objects.each do |object| 
    %li= link_to_if object.has_route?, object, url_for(object) 
+0

왜 그 개체에 대한 명명 된 경로를 만들지 설명 할 수 있습니까? 공통된 기본 유형을 공유하거나 게시 한 코드에 무엇이 잘못 되었기 때문에 모든 객체에 대한 일반 URL을 출력하는 url_for입니까? – Tigraine

+0

그들은 반드시 공통 기본 유형을 공유하지는 않습니다. 존재하지 않는다면 명명 된 경로를 만들고 싶지 않습니다. 단지 그것이 있는지 확인하고 싶습니다. – Thilo

+0

네,하지만 내 경험으로 url_for는 경로가있는 경우 특정 모델 객체에 대한 올바른 URL을 간단히 생성합니다. 또는 필터링 할 경로가없는 모델 개체가 있습니까? – Tigraine

답변

3

: 나는 좀하고 싶습니다 무엇

이 같은 것입니다 생성하거나 출력 할 수 있습니다.

%ul 
- @objects.each do |object| 
    %li= (link_to(object, url_for(object)) rescue "no link") 

희망이 있습니다.

+1

감사합니다. 응용 프로그램 논리에 대한 예외를 사용하는 것이 이상적이 아니므로 정확하게 피하기 위해 노력하고 있습니다. 명명 된 경로가없는 객체는 내 경우에는 예외가 아니지만 예상되는 동작입니다. 그러나 나는 이것에 의지해야 할 것 같아요. – Thilo

+0

나도 처음에 이것으로 어려움을 겪었다. 그러나 때로는 사물을 과장하지 않는 것이 더 낫다. : 일이 복잡하지 않은 한 현명한 복잡성을 갖지 않는 한 .. (.NET의 예외가 매우 비용이 많이 드는 작업 인 반면 루비에서는 번개가 빠른 것처럼 보입니다) – Tigraine

1

정확히 동일한 문제를 살펴보십시오. 나는 같은 이유로 구조를 좋아하지 않는다. 나는 생각하고있다

respond_to?(object.class.name.underscore + "_path") 

이것은 중첩, 하위 도메인 및 STI에 따라 수정해야한다. 예를 들어, 내 목적을 위해 :

respond_to?("ops_media_file_#{asset.class.base_class.name.underscore}_path") 

그리고 꽤 잘 작동하는 것 같습니다.

관련 문제