Ini adalah blok kode Ruby yang memanfaatkan metode pembantu Rails. Jika Anda belum terbiasa dengan blok, Anda akan sering melihatnya di Ruby.
respond_to
adalah metode pembantu Rails yang dilampirkan ke kelas Controller (atau lebih tepatnya, kelas supernya). Ini merujuk pada respons yang akan dikirim ke View (yang menuju ke browser).
Blok dalam contoh Anda memformat data - dengan mengirimkan parameter 'format' di blok - untuk dikirim dari controller ke tampilan setiap kali browser membuat permintaan untuk data html atau json.
Jika Anda menggunakan mesin lokal Anda dan mengatur Post scaffold Anda, Anda dapat pergi ke http://localhost:3000/posts
dan Anda akan melihat semua posting Anda dalam format html. Tetapi, jika Anda mengetikkan ini:, http://localhost:3000/posts.json
maka Anda akan melihat semua posting Anda di objek json yang dikirim dari server.
Ini sangat berguna untuk membuat aplikasi javascript berat yang harus lulus json bolak-balik dari server. Jika Anda mau, Anda dapat dengan mudah membuat api json di pagar belakang, dan hanya melewati satu tampilan - seperti tampilan indeks pengontrol Post Anda. Kemudian Anda bisa menggunakan perpustakaan javascript seperti Jquery atau Backbone (atau keduanya) untuk memanipulasi data dan membuat antarmuka Anda sendiri. Ini disebut UI tidak sinkron dan mereka menjadi sangat populer (Gmail adalah satu). Mereka sangat cepat dan memberikan pengguna akhir pengalaman yang lebih seperti desktop di web. Tentu saja, ini hanyalah satu keuntungan dari memformat data Anda.
Cara penulisan Rails 3 ini adalah sebagai berikut:
class PostsController < ApplicationController
# GET /posts
# GET /posts.xml
respond_to :html, :xml, :json
def index
@posts = Post.all
respond_with(@posts)
end
#
# All your other REST methods
#
end
Dengan menempatkan respond_to :html, :xml, :json
di bagian atas kelas, Anda dapat mendeklarasikan semua format yang Anda ingin controller Anda kirim ke pandangan Anda.
Kemudian, dalam metode pengontrol, yang harus Anda lakukan adalah response_with (@wh whatever_object_you_have)
Itu hanya menyederhanakan kode Anda sedikit lebih banyak daripada apa yang dihasilkan Rails secara otomatis.
Jika Anda ingin tahu tentang cara kerja bagian dalam ...
Dari apa yang saya mengerti, Rails mengintrospeksi objek untuk menentukan format apa yang sebenarnya akan terjadi. Nilai variabel 'format' didasarkan pada introspeksi ini. Rails dapat melakukan banyak hal dengan sedikit info. Anda akan terkejut melihat seberapa jauh posting sederhana atau: posting akan pergi.
Misalnya, jika saya memiliki file parsial _user.html.erb yang terlihat seperti ini:
_user.html.erb
<li>
<%= link_to user.name, user %>
</li>
Kemudian, ini saja dalam tampilan indeks saya akan membuat Rails tahu bahwa perlu menemukan parsial 'pengguna' dan beralih melalui semua objek 'pengguna':
index.html.erb
<ul class="users">
<%= render @users %>
</ul>
akan memberi tahu Rails bahwa diperlukan untuk menemukan parsial 'pengguna' dan beralih melalui semua objek 'pengguna':
Anda dapat menemukan posting blog ini berguna: http://archives.ryandaigle.com/articles/2009/8/6/what-s-new-in-edge-rails-cleaner-restful-controllers-w-respond_with
Anda juga dapat membaca dengan teliti sumbernya: https://github.com/rails/rails