SORU
25 Mayıs 2011, ÇARŞAMBA


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
8 Mart 2013, Cuma


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ı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • chrmoe

    chrmoe

    7 Kasım 2006
  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • J Medema

    J Medema

    11 EKİM 2006