Respond_with raylar: nasıl çalışır?
Burada ve orada ne kadar harika render_with
yöntemi RoR 3 hakkında bir şeyler okuyordum. Ama bile sadece kaynak arayarak da RoR API ya da bir referans bulamıyorum. Herkes birini kullanabilirsiniz, vb) veya nokta bana nasıl çalıştığını açıklamak aslında benim kendi kodunu incelemek, böylece uygulanan bu yere beni?
çok teşekkürler!
CEVAP
Müdahale için kodu bir sınıf ve bir modül dayanır. ActionController::Base sınıfa dahil MimeResponds ApplicationController
devralır. Sonra respond_with kullanırken varsayılan davranış sağlar ActionController::Responder var.
Varsayılan olarak, raylar yanıt sağlar tek davranış adı eylem eşleşen ile bir şablon oluşturmak için örtülü bir girişimdir. Eylem içinde daha fazla talimat gerektirir ötesinde, ya da özel bir respond_to birden fazla biçim yanıtları işlemek için bir blok ile arayın.
En denetleyicileri özelleştirme oldukça yaygın bir model olarak kullanmak, müdahale daha varsayılan davranış tanıtarak soyutlama ekstra bir düzeyde sağlamak. Eylemler belirli biçimleri için to_xml/to_json arama okuyun ve değiştiren eylemler aynı sağlamanın yanı sıra başarılı değiştiren eylemler için yönlendirir.
Müdahale nasıl davranması özelleştirmek için birkaç fırsat, tamamen veya davranışını geçersiz kılma uzanan ince düzenlemeler var.
Sınıf Seviyesi: respond_to
Buraya Yanıtlayan işlemesi gereken biçimlerini belirtin. Biçimleri için geçerli olduğu için özelleştirilebilir. Her formatı ayrı görüşmeleri ile, her biçimdeki eylemleri tam özelleştirme izin belirtilebilir.
# Responds to html and json on all actions
respond_to :html, :json
# Responds to html and json on index and show actions only.
respond_to :html, :json, :only => [:index,:show]
# Responds to html for everything except show, and json only for index, create and update
respond_to :html, :except => [:show]
respond_to :json, :only => [:index, :create, :update]
Sınıf Seviyesi: responder
Bu yanıtlayan tutan sınıf bir niteliktir. Bu proc/lambda veya aramaya cevap veren bir sınıf kullanabilirsiniz anlamına gelir çağrı yanıt veren bir şey olabilir. Başka bir alternatif mevcut yanıtlayıcı veya modülleri mevcut yöntemler, varsayılan davranış artırmada aşırı kendisine dahil ederse.
class SomeController < ApplicationController
respond_to :json
responder = proc do |controller, resources, options|
resource = resources.last
request = controller.request
if request.get?
controller.render json: resource
elsif request.post? or request.put?
if resource.errors.any?
render json: {:status => 'failed', :errors => resource.errors}
else
render json: {:status => 'created', :object => resource}
end
end
end
end
Durumlarda kullanın bazı ilginç kenar olsa, ya da öntanımlı yanıtlayıcı içine modülleri uzanan karıştırma daha yaygın desenler olacağını daha olasıdır. Herhangi bir durumda, ilgili seçenekleri respond_with dan geçtiğini oldukları kaynakları ve seçenekleri vardır.
Örneği Seviyesi: respond_with
Seçenekleri burada denetleyicisi oluşturmak veya redirect_to geçmek isteyenler vardır, ama sadece başarı senaryoları için eklenmiştir. Diğer eylemler için bu hale çağrıları olurdu eylemleri ALMAK için, bu yönlendirme için seçenekler olacaktır. Muhtemelen bu en yararlı olur respond_with bağımsız değişkenleri doğru URL oluşturmak için yeterli olmaması halinde yeniden yönlendirme yolu geçersiz kılmak için kullanılabilir :location
seçeneği.
# These two are essentially equal
respond_with(:admin, @user, @post)
respond_with(@post, :location => admin_user_post(@user, @post)
# Respond with a 201 instead of a 200 HTTP status code, and also
# redirect to the collection path instead of the resource path
respond_with(@post, :status => :created, :location => posts_path)
# Note that if you want to pass a URL with a query string
# then the location option would be needed.
# /users?scope=active
respond_with(@user, :location => users_path(:scope => 'active'))
Alternatif olarak, responders gem sadece varsayılan davranışı geçersiz kılmak için bazı modülleri sağlar. Varsayılan yanıtlayan uzanan isimsiz bir sınıf varsayılan yanıtlayan geçersiz kılar ve bu sınıf için özel modülleri karıştırma için sınıf seviyesinde bir yöntem sağlar. Burada en yararlı yanıp varsayılan bir dizi sağlayan flash yanıtlayan, varsayılan olarak İ18n sistemi, config/locales/en.yml
özelleştirme delege.
Önceki projelerde kullandım özel müdahale ekibi bazı örnekler otomatik olarak kaynaklarımı dekore edilmiş bir cevap vardır, ve kolayca veya sayfa Başlığı özelleştirme geçersiz kılmak için bir arayüz ile sayfa başlıkları varsayılan bir dizi sağladı.
Nasıl respond_to bloğu çalışır?raylar:...
JavaScript kilitler nasıl çalışır?...
CSS üçgenler nasıl çalışır?...
Veri bağlama Nasıl çalışır?AngularJS :...
Nasıl veritabanı indeksleme çalışır?...