2010-09-09 12 views
21

Sadece JS formatıyla erişilebiliyorsa kullanabileceğim bir dizi kaynağım var. Rayların rota kaynakları bana formatları artı standart HTML verir. Sadece JS formatı yollarının oluşturulmasının bir yolu var mı?Raylar Rotaları - Bir kaynağa ait kullanılabilir biçimleri sınırlandırma

+1

Hangi Rails versiyonunu kullanıyorsunuz? – Garrett

+2

Cevabımı aşağıda kabul edebilir misiniz, doğru olanı, mevcut seçilmiş cevap yanlış ve toplumu karıştırıyor. – koonse

cevap

16

sadece biçimi hakkında kısıtlamaları ekleyin:

resources :photos, :constraints => {:format => /(js|json)/} 
+0

Yanlış bir şey yapmıyorsam, bu hala/photos: html dosyasına erişmeme izin veriyor. Eksik bir yol istisnası beklediğimde eksik şablon mesajını alıyorum. Düşünceler? –

+0

Bu,/(js | json)/'olmalıdır? – Garrett

+0

Evet, bunu yakaladım ve değiştirdim. Hala benim için çalışmıyor. Kaynaklarım var: üyeler,: controller => 'homes/members',: constraints => {: format =>/js /} –

-1

isteğin biçimi MIME::JS olmadıkça bir yönlendirme hata başlatan bir before_filter kullanabilirsiniz.

app/kontrolörleri/application_controller.rb: Bir kapsamda bu rotaları sarmak gerekir raylar Action Controller Guide

+0

I ' ve bu tür bir problemle başa çıkabilmek için benzer bir yaklaşım kullanmışlardır. https://github.com/marcusg/force_format – marcus3006

51

kaplı olarak

class ApplicationController < ActionController::Base 
    before_filter :check_js 

    private 
    def check_js 
     raise RoutingError.new('expected application/json') unless request.format == MIME::JS 
    end 
end 

:only, :except ve :skip_before_filter ile daha ameliyatla bu filtreyi uygulayın. Kısıtlamalar maalesef bu durumda beklendiği gibi çalışmıyor. Bu tür bir bloğun bir örnektir

...

scope :format => true, :constraints => { :format => 'json' } do 
    get '/bar' => "bar#index_with_json" 
end 

fazla bilgi burada bulunabilir

: o kadar almaz nasıl

# routes.rb 

class OnlyAjaxRequest 
    def matches?(request) 
    request.xhr? 
    end 
end 

post "/test/suggestions", to: "test#suggestions", :constraints => OnlyAjaxRequest.new 

https://github.com/rails/rails/issues/5548

+4

Bu cevap olarak işaretlenmelidir. –

+3

Eğer 'kaynakları' kullanıyorsanız, bir kapsam bloğuna ihtiyacınız yoktur, sadece ': format => true' ve': kısıtları => ... 'doğrudan' kaynaklar' aramasına ekleyin. – Nathan

+0

Bu durum, kapsamlı bir rota için benim durumumda çalıştı.'kaynaklar: fotoğraflar, format: true, kısıtlamalar: 'json' – maicher

0

Bulundu (cant kullanımını #xhr?)

resource :offers, only: :show, format: true, constraints: { format: 'pdf' }

Yardım edin umarım

İlgili konular