Eylemlerden biri için düzeni kapat


81

Benim durumum: ReportsController'ın görüntüleme eylemi saf html'yi oluşturmalı, ancak bir dosya olarak değil (tarayıcıda görüntülemek ve daha sonra kaydetmek için). Dolayısıyla, render için view template view.html.erb kullanıyorum ve bu eylem için herhangi bir düzeni kapatmam gerekiyor. Ancak bu denetleyicinin diğer eylemlerinde düzenler dokunulmadan kalmalıdır. Yalnızca şu şekilde tüm denetleyici için kapatılır:

ReportsController < ApplicationController
  layout false

Ama bunu yanlış yapmak :( eylemde buna benzer bir şeyi kullanmaya çalıştığım tüm eylemler için:

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

Ne yapmalıyım?


Kesinlikle bu açık dönüşe ihtiyacın yok. Rapor geçerliyse sayfa düzeninin görüntülenmesini ister misiniz?
tfwright

Yanıtlar:


73

Bunu dene:

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

Görünüşe göre bu yönerge yanlış (veya beklenmedik) çalışıyor. Bu parametrelerin bazı kombinasyonlarını kullanmaya çalıştım (: sadece,: hariç). Ancak tüm eylemler için tüm düzenleri kaldırmak garip çalıştı. Bunun 'layoutname' yerine nil veya false olduğunu düşünüyorum. Ve sistem, uygulama düzenini yok sayarak diğer tüm eylemler için 'denetleyici adı' düzenlerini kullanmaya çalışır. Bu parametrelerle oynamaya çalışın ve tüm bunların ne olduğunu anlayacaksınız.
Antiarchitect

2
Haklısın, :onlyüzerinde düzgün çalışmıyor layout nil. Bununla birlikte, düzeni değiştirerek ve istisna dışında geri ekleyerek çalışmasını sağlayabildim. Cevabımı güncelledim.
mckeed

2
David Ortiz'in cevabı "daha doğrudur" çünkü söz konusu tek eylem için düzen anahtarını düzgün bir şekilde izole ediyor.
Frank Koehl

@ Paul'a katılıyorum - falseçalışıyor! Bunun için teşekkürler!
mrstif

layout false, only: :viewAntiarchitect'in bahsettiği gibi aynı hedefi yan etkiler olmadan gerçekleştirmenin daha özlü bir yolu gibi geliyor.
SMAG


11

Yanıt bloğuna ekleyin layout: false.

Örneğin:

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

2

Standart olmayan ve düzeni olmayan bir şablon almak istiyorsanız, şunları kullanabilirsiniz:

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

Peki ya tam tersi - varsayılan düzeni şablon olmadan oluşturabilir miyim?
Kasım
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.