Saya mencoba menghasilkan respons JSON yang menyertakan beberapa HTML. Jadi, saya punya/app/views/foo/bar.json.erb
:
{
someKey: 'some value',
someHTML: "<%= h render(:partial => '/foo/baz') -%>"
}
Saya ingin merender /app/views/foo/_baz.html.erb
, tetapi hanya akan merender /app/views/foo/_baz.json.erb
. Melewati :format => 'html'
tidak membantu.
ruby-on-rails
format
render
partial
actionview
James A. Rosen
sumber
sumber
Jawaban:
Dimulai dengan Rails 3.2.3, saat memanggil render: parsial (hanya bekerja di luar
respond_to
blok).dari pada
sumber
:format
opsi akan kerja. Terima kasih!:content_type
opsi dalam beberapa kasus - mis. Merender template HTML dari dalamformat.pdf
blok hanya dapat dilakukan denganrender "template", formats: [:html], content_type: "text/html"
. Saya memerlukan ini karena saya mengizinkan pengunduhan langsung contoh buku saya hanya untuk anggota milis saya - pengunjung biasa mendapatkan formulir pendaftaran sebagai gantinya.ada apa dengan
? Saya baru saja mencoba ini untuk membuat sebagian ERB HTML dari dalam template pembuat Atom dan berfungsi dengan baik. Tidak perlu mengotak-atik variabel global yang diperlukan (ya, saya tahu mereka memiliki "@" di depannya, tapi itulah mereka).
with_format &block
Pendekatan Anda keren, dan memiliki keuntungan bahwa Anda hanya menentukan formatnya, sedangkan pendekatan sederhana menentukan mesin template (ERB / builder / etc) juga.sumber
baz.en.html.erb
,baz.fr.html.erb
) dan Anda menginginkanrender :partial
logika untuk memilih yang benar (dengan fallback, dll).DEPRECATION WARNING: Passing a template handler in the template name is deprecated. You can simply remove the handler name or pass render :handlers => [:erb] instead.
foo.baz.html.[your_string]
bukanfoo.baz.[your_string]
. Jawaban zgchurc adalah solusi yang lebih baik.Untuk Rails 3, blok with_format berfungsi, tetapi ini sedikit berbeda:
sumber
Rails 4 akan memungkinkan Anda untuk melewatkan parameter format. Jadi Anda bisa melakukannya
Perhatikan Anda dapat melakukan sesuatu yang serupa di Rails 3 tetapi itu tidak akan meneruskan format itu ke sub parsial mana pun (jika formulir memanggil parsial lain).
Anda dapat memiliki kemampuan Rails 4 di Rails 3 dengan membuat config / initializers / renderer.rb:
Lihat http://railsguides.net/2012/08/29/rails3-does-not-render-p Partial-for-specific-format/
sumber
Membangun tanggapan roninek , saya telah menemukan solusi terbaik sebagai berikut:
di /app/helpers/application.rb:
Di /app/views/foo/bar.json:
Solusi alternatifnya adalah dengan mendefinisikan kembali
render
untuk menerima a:format
parameter.Saya tidak bisa
render :file
bekerja dengan penduduk setempat dan tanpa jalan yang salah.sumber
Di Rails 3, Tampilan memiliki array format, yang berarti Anda dapat menyetelnya untuk mencari [: mobile,: html]. Setelan defaultnya adalah mencari: template seluler, tetapi kembali ke: template html. Efek pengaturan ini akan menurun menjadi bagian dalam.
Cara terbaik, tetapi masih cacat, yang dapat saya temukan untuk mengatur ini adalah dengan meletakkan baris ini di bagian atas setiap template seluler lengkap (tetapi tidak sebagian).
Kekurangannya adalah Anda harus menambahkan baris itu ke beberapa templat. Jika ada yang tahu cara menyetel ini sekali, dari application_controller.rb, saya ingin mengetahuinya. Sayangnya, tidak berhasil menambahkan baris itu ke tata letak seluler Anda, karena templat dirender sebelum tata letak.
sumber
Hanya menguraikan apa yang ditulis zgchurch:
Pikir itu mungkin berguna.
sumber
Anda memiliki dua pilihan:
1) gunakan
render :file
2) ubah format template menjadi html dengan menyetel variabel @template_format
sumber
Saya memiliki file bernama 'api / item.rabl' dan saya ingin merendernya dari tampilan HTML jadi saya harus menggunakan:
render file: 'api/item', formats: [:json]
(
file
karena file tersebut tidak memiliki garis bawah pada namanya,formats
dan bukanformat
(serta pass dan array))sumber
Tampaknya mengoper
formats
opsi akan membuatnya dengan benar di versi Rails yang lebih baru, setidaknya 3.2:sumber
Saya menemukan utas ini ketika saya mencoba membuat sebagian XML di file tampilan xml.builder lain. Berikut adalah cara yang bagus untuk melakukannya
Dan ya ... Nama file lengkap juga berfungsi di sini ...
sumber