2009-05-12 7 views
4

에없는 기본 템플릿을 렌더링 : 나는 렌더링 할내가 레일에 다음과 같은 기능을 해킹하려는 요청 템플릿 플러그인 용 레일

은 (부분) 템플릿 (형식에 관계없이) 존재하지 않습니다 기본 템플릿.

그래서 users/index.html.erb (또는 다른 형식)가 존재하지 않으면 'default/index.html.erb'가 렌더링되어야한다고 'users/index'작업을 호출한다고 가정 해보십시오. 나는 '위치/편집'과 '위치/edit.html.erb'작업을 호출하는 경우

마찬가지로, '기본/edit.html.erb가'경우, 파셜를 들어

렌더링되어야한다, 존재하지 않는 나는 'location/index'액션을 호출하고 'locations/index.html.erb'템플릿은 존재하지 않는 부분 'location/_location'을 호출하고 'default/_object'를 렌더링해야합니다.

해결책은 seek 템플릿 변수 (예 : @users, @locations)와 요청 된 경로 (예 : 사용자/색인, 위치/편집)에 대한 정보를 제공합니다. 또한 부분적으로 작동해야합니다.

나는 아래에 게시 할 몇 가지 옵션을 생각해 보았습니다. 그들 중 누구도 완전히 만족스럽지 않습니다.

답변

0

해결 방법 1 :

원숭이 패치 ActionView :: 자료 #은


module ActionView 
    class Base 
    def render_with_template_missing(*args, &block) 
     # do something if template does not exist 

     render_without_template_missing(*args, &block) 
    end 
    alias_method_chain :render, :template_missing 
    end 
end 

이 원숭이 패치 추한 코드 레일 및 결과 (변경) 내부를 조사하는 데 필요한 렌더링, 그러나 아마 작동합니다.

11

해결 방법 2 : 단점

 


class ApplicationController > ActionController::Base 
    rescue_from ActionView::MissingTemplate do |exception| 
    # use exception.path to extract the path information 
    # This does not work for partials 
    end 
end 

 

와 ApplicationController

에서

사용 'rescue_from는'파셜 작동하지 않습니다.

+0

깔끔하게!, 나도 이것을 사용합니다, 감사합니다 Logged – Oinak

2

비교적 깨끗한 패치를 발견했으며, 질문에서 정확히 필요한 템플릿의 패치 만 패치합니다.


module ActionView 
    class PathSet 

    def find_template_with_exception_handling(original_template_path, format = nil, html_fallback = true) 
     begin 
     find_template_without_exception_handling(original_template_path, format, html_fallback) 
     rescue ActionView::MissingTemplate => e 
     # Do something with original_template_path, format, html_fallback 
     raise e 
     end 
    end 
    alias_method_chain :find_template, :exception_handling 

    end 
end 
3

레일 3.1이 자동으로 컨트롤러에보고 한 후 응용 프로그램/template.html.erb에서 파일을 찾습니다/당신과 같이 예외에서 볼 수 template.html.erb :

그래서
Missing template [controller name]/index, application/index with {:locale=>[:en, :en], :formats=>[:html], :handlers=>[:erb, :coffee, :builder]}. Searched in: * "/path/to/rails_project/app/views" 

, 그냥 응용 프로그램 /보기/응용 프로그램에 기본 템플릿을 넣어