2011-01-22 3 views
1

레이아웃없이 일부보기를 렌더링해야합니다. 줄 건너 뛰기 : render : layout => false 그리고 컨트롤러 동작의 다른 로직 인 경우 phtml (일반 html)과 같은 맞춤 mime 유형이 있습니다.레일스 3 사용자 정의 MIME 형식 - 기본보기 형식

이 형식은 레이아웃이없는 동일한 HTML보기를 렌더링해야합니다. 나는이 코드를 app으로 완성한다. 컨트롤러 :

before_filter proc { |controller| 
    if params[:format] && params[:format]=='phtml' 
    controller.action_has_layout = false 
    controller.request.format = 'html' 

    end 
    } 

첫째, 두 번째 난 더 이상 방법으로 컨트롤러에서이 형식을 제어 할 수 추한 :

respond_to :phtml,:only=>:index 

항상 요구 된 형식의 PHTML와보기를 렌더링하기 때문이다. 더 나은 솔루션이 있습니까? 예? 보기 형식을 별칭으로 표시하려면 어떻게해야합니까?

class ProductsController < ApplicationController 
    layout "product", :except => [:index, :rss] 
end 

또는 전혀 레이아웃을 사용하지 않으려면 :

많이 감사

+1

필자는 '.phtml'이 PHP/PERL 맛을 낸 HTML에 대해 항상 생각했다고 생각했습니다. – Znarkus

+0

u가 옳습니다. .plain_html이 될 수 있습니다 ... 여기에 요점이 아닙니다 ... – alex

+0

이 질문도 있습니다. "일반 html"을 렌더링하는 방법이 필요합니다. 분명히 많이 올랐기 때문에 이것을하기위한 좋은 방법이되어야합니다. 나는 모든 컨트롤러 동작을 반복하고 싶지 않습니다 (DRY하지 말 것). 아직 좋은 해결책을 모르지만 귀하의 정보가 도움이되었습니다. 감사합니다. –

답변

1

직접 컨트롤러에 layout 방법을 사용할 수 있습니다 대한 추가 정보를 원하시면

class ProductsController < ApplicationController 
    layout nil 
end 

체크 아웃 the guide을 .

+0

답변 해 주셔서 감사합니다. 그것은 나에게 해결책이 아니다. 왜냐하면 나는 같은 행동 (상황에 상관없이)이 필요하기 때문이다. 그것이 내가 다른 형식을 필요로하는 이유입니다. 예를 들어, 인쇄, javascript에서 "plain"html을 얻는 등의 상황에 유용합니다 ... – alex

+1

'layout'은 proc도 허용합니다. 그러면 요청한 형식을 기반으로 조건부로 레이아웃을 선택할 수 있습니다. 자세한 내용은 가이드 (http://guides.rubyonrails.org/layouts_and_rendering.html)를 확인하십시오. – coreyward

+0

ok ... 레이아웃 문제를 해결할 수 있습니다. 하지만 그것은 HTML 형식을 해결할 수 없습니다. 그것은 여전히 ​​phtml 또는 (plain_html) 템플릿을 찾을 것입니다. 이 문제를 해결하려면 aproach가 필요합니다. Finaly 우리는 여전히 레이아웃 proc 블록에 대한 논리를 가지고 있습니다. :). 별칭 to_plain_html, to_html 같은 뭔가 AppResponder alex

1
나는 더 나은 솔루션, 단지 내 앞의 예에 업데이트 발견하지 않았습니다

: 새로운 형식은 우리의 컨트롤러에 정의되어

before_filter proc { |controller| 
    if params[:format] && params[:format]=='plain_html' && controller.collect_mimes_from_class_level.include?(:plain_html) 
     controller.action_has_layout = false 
     controller.request.format = 'html' 
    end 
    } 

내가 확인이 줄을 추가 : 이제

controller.collect_mimes_from_class_level.include?(:plain_html) 

우리 새로운 형식의 새보기를 만드는 대신 표준 HTML보기를 렌더링하는 완전히 새로운 형식을 가질 수 있습니다.

기존 HTML 코드를 공유하지 않지만 요청 된 형식에 따라 다른 로직을 작성하는 경우 유용 할 수 있습니다. 나는 다른 사람이 유용하게 찾을 수 있기를 바랍니다

http://www.example.com/pages/1.plain_html 

: 같은 것

class PagesController < ActionController::Base 

layout 'print',:only=>:show 
respond_to :plain_html,:only=>[:show] 

    def show 
    Page.find(1) 
    respond_with @page 
    end 
end 

요청 :

예를 들어, 우리가 쉽게와 같은 인쇄에 대한 우리의 HTML 콘텐츠를 준비 할 수 있습니다.

더 나은 방법이 있으시면 Google에 알려 주시기 바랍니다.

감사합니다.

+0

이것은 꽤 좋지만 중첩 된 레이아웃을 렌더링 할 수 있어야하므로 나에게는 적합하지 않습니다. action_has_layout을 false로 설정하면 모든 레이아웃이 제거됩니다. – Ajedi32