web-dev-qa-db-ja.com

いずれかのアクションのレイアウトをオフにします

私の状況:ReportsControllerの表示アクションは、ファイルとしてではなく、純粋なhtmlをレンダリングする必要があります(ブラウザーで表示し、後で保存するため)。したがって、レンダリングにはビューテンプレートview.html.erbを使用し、このアクションのレイアウトをオフにします。ただし、このコントローラーの他のアクションでは、レイアウトはそのままにしておく必要があります。このようにコントローラー全体でのみオフになります:

ReportsController < ApplicationController
  layout false

しかし、それは間違っています:(すべてのアクションについて、私はこのようなものをアクションで使用しようとしました:

def view      
  @report = Report.new(params[:report])
  unless @report.valid?
    render :action => 'new' and return
  else
    render :layout => false     
  end   
end

私は何をすべきか?

73
Antiarchitect

これを試して:

ReportsController < ApplicationController
  layout false
  layout 'application', :except => :view
65
mckeed

これでうまくいくはずです、

def view
    ...
    render :layout => false
end

ドキュメントへのリンク

106
David Ortiz

応答ブロックで、layout: falseを追加します。

例えば:

respond_to do |format|
  format.html { render :layout => false } # your-action.html.erb
end
10
Archonic

非標準のテンプレートを取得したい場合、レイアウトは使用できません:

def non_rest
  render template: 'layouts/something_new', layout: false
end
1