Memahami "sihir" Rails yang berkaitan dengan rendering parsial (dan memasukkan penduduk lokal ke dalamnya).
Mengapa ini berhasil:
<%= render "rabbits/form" %>
Dan pekerjaan ini:
<%= render "rabbits/form", :parent => @warren, :flash => flash %>
tapi ini tidak berhasil:
<%= render "rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Tapi ini memang:
<%= render :partial =>"rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Juga, bagaimana saya bisa mencari nuansa ini sehingga saya tidak perlu mengganggu orang di SO?
ruby-on-rails
partial-views
Meltemi
sumber
sumber
Jawaban:
Jawaban singkatnya adalah metode render melihat argumen pertama yang Anda berikan. Jika Anda memasukkan hash (yang menyertakan
:partial => 'foo', :locals => {blah blah blah}
) maka metode ini akan meneruskan semua argumen Anda sebagai hash dan menguraikannya sesuai dengan itu.Jika Anda memasukkan string sebagai argumen pertama Anda, argumen pertama akan diasumsikan sebagai nama parsial Anda, dan sisanya akan diteruskan sebagai penduduk lokal Anda. Namun, dalam panggilan berikutnya, itu sebenarnya menetapkan
:locals => your_locals_argument
, yang dalam hal ini adalah keseluruhan:locals => {locals hash}
, bukan hanya{locals hash}
; yaitu Anda berakhir dengan:locals => {:locals => {locals hash}}
, bukan:locals => {locals hash}
.Jadi saran saya adalah untuk selalu secara eksplisit menyampaikan nilai dengan cara yang sama sepanjang waktu, dan Anda tidak akan memiliki masalah. Untuk mempelajari tentang ini, saya langsung membuka kode itu sendiri ( actionpack / lib / base.rb ,
render()
metode di Rails 2; Rails 3 berbeda). Ini latihan yang bagus.Selain itu, jangan khawatir tentang "mengganggu" orang di SO. Karena itulah situs ini ada. Saya bahkan belajar sesuatu dari ini.
sumber
jika Anda perlu menentukan: penduduk setempat, Anda perlu menentukan: parsial atau: template
harus bekerja
sumber
clone https://github.com/rails/rails.git
? atau apakah ada cara yang lebih baik? Maaf, tapi saya relatif baru mengenal RoR dan belum menemukan cara yang baik / mudah / konsisten untuk mencari dokumentasi Rails ... seperti bahwa ADA .http://api.rubyonrails.org/
tidak mudah dicari. dan sumber dari git juga tidak ... huhUntuk menjadi yang terhormat, saya hanya tahu tentang kasus penggunaan ini, karena saya telah mengikuti Rails selama beberapa tahun terakhir dan membaca pengumuman bahwa cara baru untuk melakukannya telah ditambahkan. Saya sendiri sering melakukan kesalahan, tapi biasanya mudah diperbaiki.
Itu salah satu bagian dari Rails API yang belum dipikirkan secara matang, jika Anda bertanya kepada saya. Itu hanya mengakumulasi lebih banyak gula sintaksis selama bertahun-tahun, tanpa mencela perilaku lama apa pun. Metode render memiliki diabetes.
Untuk membuatnya lebih buruk, render berperilaku berbeda di pengontrol dan tampilan. Saya juga melihat konten argumen pertama untuk melihat apakah itu file, template, aksi atau parsial. Jika dimulai dengan garis miring maka itu adalah file, atau semacamnya.
Saya mendukung penggunaan notasi yang lebih pendek jika memungkinkan. Karena notasi pendek mengkomunikasikan maksud dengan cukup baik. Saat membacanya, biasanya ia melakukan apa yang menurut Anda dilakukannya. Menulis parsial tidaklah mudah.
sumber
Berikut adalah sumber metode render dari http://api.rubyonrails.org/classes/ActionView/Rendering.html#method-i-render :
Semoga bantuan ini!
sumber