Моя ситуация: действие View в 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
Что я должен делать?
ruby-on-rails
layout
Антиархитектор
источник
источник
Ответы:
Попробуй это:
ReportsController < ApplicationController layout false layout 'application', :except => :view
источник
:only
не работает нормальноlayout nil
. Однако мне удалось заставить его работать, обнулив макет и добавив его обратно с исключением. Я обновил свой ответ.false
работает! Спасибо за это!layout false, only: :view
кажется более лаконичным способом достижения той же цели без побочных эффектов, как упоминает Antiarchitect.Это должно сделать это,
def view ... render :layout => false end
Ссылка на документацию
источник
layout: false
для каждого формата в действии.В блоке ответа добавьте
layout: false
.Например:
respond_to do |format| format.html { render :layout => false } # your-action.html.erb end
источник
Если вы хотите получить нестандартный шаблон без макета, вы можете использовать:
def non_rest render template: 'layouts/something_new', layout: false end
источник