Moja sytuacja: akcja View programu ReportsController powinna renderować czysty html, ale nie jako plik (aby wyświetlić go w przeglądarce i zapisać). Więc do renderowania używam szablonu widoku view.html.erb i nie chcę, aby wyłączyć wszelkie układy dla tej akcji. Ale w innych działaniach tego kontrolera układy powinny pozostać nietknięte. Działa tylko wyłączając cały kontroler w ten sposób:
ReportsController < ApplicationController
layout false
Ale robię to źle :( dla wszystkich działań próbowałem użyć czegoś takiego w akcji:
def view
@report = Report.new(params[:report])
unless @report.valid?
render :action => 'new' and return
else
render :layout => false
end
end
Co powinienem zrobić?
ruby-on-rails
layout
Antiarchitect
źródło
źródło
Odpowiedzi:
Spróbuj tego:
ReportsController < ApplicationController layout false layout 'application', :except => :view
źródło
:only
nie działa poprawnielayout nil
. Udało mi się to uruchomić, niwelując układ i dodając go z powrotem, z wyjątkiem jednak. Zaktualizowałem odpowiedź.false
działa! Dziękuję za to!layout false, only: :view
wydaje się bardziej zwięzłym sposobem na osiągnięcie tego samego celu bez skutków ubocznych, o których wspomina Antiarchitect.To powinno wystarczyć,
def view ... render :layout => false end
Link do dokumentacji
źródło
layout: false
dla każdego formatu w akcji.W bloku odpowiedzi dodaj
layout: false
.Na przykład:
respond_to do |format| format.html { render :layout => false } # your-action.html.erb end
źródło
Jeśli chcesz uzyskać niestandardowy szablon, bez układu, możesz użyć:
def non_rest render template: 'layouts/something_new', layout: false end
źródło