web-dev-qa-db-fra.com

Désactiver la mise en page pour une action

Ma situation: L'action d'affichage de ReportsController doit restituer du code HTML pur, mais pas sous forme de fichier (pour l'afficher dans le navigateur et l'enregistrer après). Donc, pour le rendu, j'utilise le modèle de vue view.html.erb et i neet pour désactiver les présentations pour cette action. Mais dans les autres actions de ce contrôleur, les présentations ne doivent pas être modifiées . Ne fonctionne que pour le contrôleur entier, comme ceci:

ReportsController < ApplicationController
  layout false

Mais que le faire mal :( pour toutes les actions J'ai essayé d'utiliser quelque chose comme ceci en action:

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

Que devrais-je faire?

69
Antiarchitect

Essaye ça:

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

Cela devrait le faire,

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

Lien vers la documentation

98
David Ortiz

Dans le bloc de réponse, ajoutez layout: false.

Par exemple:

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

Si vous souhaitez obtenir un modèle non standard, sans mise en page, vous pouvez utiliser:

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