My situation: View action of ReportsController should render pure html, but not as a file (to view it in browser and save it after). So for rendering I use view template view.html.erb and i neet to turn off any layouts for this action. But in other actions of this controller layouts should stay untouched. Works only turning off for whole controller like this:
ReportsController < ApplicationController
layout false
But that doing it wrong :( for all the actions I tried to use something like this in action:
def view
@report = Report.new(params[:report])
unless @report.valid?
render :action => 'new' and return
else
render :layout => false
end
end
What should I do?
Try this:
ReportsController < ApplicationController
layout false
layout 'application', :except => :view
:only
doesn't work properly on layout nil
. I was able to get it working by nilling the layout and adding it back with the exception, however. I've updated my answer.
false
works! Thanks for that!
layout false, only: :view
feels like a more concise way to accomplish the same goal without side effects like Antiarchitect mentions.
In the respond block, add layout: false
.
For example:
respond_to do |format|
format.html { render :layout => false }
end
If you want to get a non-standard template, with no layout you can use:
def non_rest
render template: 'layouts/something_new', layout: false
end
Success story sharing
layout: false
for every format in the action.