Meine Situation: Die Aktion "Anzeigen von ReportsController anzeigen" sollte reines HTML rendern, jedoch nicht als Datei (um sie im Browser anzuzeigen und anschließend zu speichern). Zum Rendern verwende ich also die Ansichtsvorlage view.html.erb und neet, um alle Layouts für diese Aktion zu deaktivieren. Bei anderen Aktionen dieses Controllers sollten Layouts jedoch unberührt bleiben. Funktioniert nur beim Ausschalten für den gesamten Controller wie folgt:
ReportsController < ApplicationController
layout false
Aber das macht es falsch :( Für alle Aktionen habe ich versucht, so etwas in Aktion zu verwenden:
def view
@report = Report.new(params[:report])
unless @report.valid?
render :action => 'new' and return
else
render :layout => false
end
end
Was soll ich machen?
ruby-on-rails
layout
Antiarchitect
quelle
quelle
Antworten:
Versuche dies:
ReportsController < ApplicationController layout false layout 'application', :except => :view
quelle
:only
funktioniert nicht richtiglayout nil
. Ich konnte es zum Laufen bringen, indem ich das Layout ausfüllte und es mit Ausnahme wieder hinzufügte. Ich habe meine Antwort aktualisiert.false
funktioniert! Dank dafür!layout false, only: :view
Es scheint eine präzisere Möglichkeit zu sein, dasselbe Ziel ohne Nebenwirkungen zu erreichen, wie dies von Antiarchitect erwähnt wird.Das sollte es tun,
def view ... render :layout => false end
Link zur Dokumentation
quelle
layout: false
für jedes Format in der Aktion angeben müssen .Fügen Sie im Antwortblock hinzu
layout: false
.Zum Beispiel:
respond_to do |format| format.html { render :layout => false } # your-action.html.erb end
quelle
Wenn Sie eine nicht standardmäßige Vorlage ohne Layout erhalten möchten, können Sie Folgendes verwenden:
def non_rest render template: 'layouts/something_new', layout: false end
quelle