Bu, Rails yardımcı yönteminden yararlanan bir Ruby kodu bloğudur. Henüz bloklara aşina değilseniz, Ruby'de çok şey göreceksiniz.
respond_to
Controller sınıfına (veya daha doğrusu süper sınıfına) eklenen bir Rails yardımcı yöntemidir. Görünüme (tarayıcıya gidecek olan) gönderilecek yanıta başvuruyor.
Örneğinizdeki blok, bir tarayıcı html veya json verileri için her istekte bulunduğunda denetleyiciden görünüme gönderilecek verileri - blokta bir 'format' parametresini geçirerek - biçimlendirmektir.
Yerel makinenizdeyseniz ve Post iskele kurulumunuz varsa, gidebilirsiniz http://localhost:3000/posts
ve tüm yayınlarınızı html formatında görürsünüz. Ancak, şunu yazarsanız:, http://localhost:3000/posts.json
tüm gönderilerinizi sunucudan gönderilen bir json nesnesinde görürsünüz.
Bu, sunucudan json ileri ve geri geçmesi gereken javascript ağır uygulamalar yapmak için çok kullanışlıdır. İsterseniz, raylarınızın arka ucunda kolayca bir json api oluşturabilir ve yalnızca bir görünüm geçirebilirsiniz - Post denetleyicinizin dizin görünümü gibi. Ardından, verileri işlemek ve kendi arayüzünüzü oluşturmak için Jquery veya Omurga (veya her ikisi) gibi bir javascript kütüphanesi kullanabilirsiniz . Bunlara eşzamansız kullanıcı arayüzleri denir ve gerçekten popüler hale gelirler (Gmail birdir). Çok hızlıdırlar ve son kullanıcıya web'de daha masaüstü benzeri bir deneyim sunarlar. Elbette, bu verilerinizi biçimlendirmenin sadece bir avantajıdır.
Rails 3 yazmanın yolu şöyle olurdu:
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
respond_to :html, :xml, :json
Sınıfın en üstüne koyarak , denetleyicinizin görünümlerinize göndermesini istediğiniz tüm formatları bildirebilirsiniz.
Ardından, denetleyici yönteminde tek yapmanız gereken yanıt_with (@whatever_object_you_have)
Kodunuzu Rails'in otomatik olarak oluşturduğundan biraz daha basitleştirir.
Bunun iç işleyişini bilmek istiyorsanız ...
Anladığım kadarıyla, Rails, gerçek formatın ne olacağını belirlemek için nesneleri iç içe geçirir. 'Format' değişkenleri değeri bu içgözlemi temel alır. Raylar biraz bilgi ile çok şey yapabilir. Basit bir @ post veya: yazısının ne kadar ilerleyeceğine şaşıracaksınız.
Örneğin, şöyle görünen bir _user.html.erb kısmi dosyası vardı:
_user.html.erb
<li>
<%= link_to user.name, user %>
</li>
Daha sonra, dizin görünümümde bu tek başına Rails 'kullanıcıları' kısmi bulmak ve tüm 'kullanıcılar' nesneleri üzerinden yineleme gerektiğini bildirir:
index.html.erb
<ul class="users">
<%= render @users %>
</ul>
Rails 'kullanıcı' kısmi bulmak ve tüm 'kullanıcılar' nesneleri üzerinden yineleme gerektiğini bilmek:
Bu blog gönderisini faydalı bulabilirsiniz: http://archives.ryandaigle.com/articles/2009/8/6/what-s-new-in-edge-rails-cleaner-restful-controllers-w-respond_with
Ayrıca kaynağı inceleyebilirsiniz: https://github.com/rails/rails