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.