10

Belirli bir denetleyiciye gitmek için belirli bir kısıtlamayı karşılayan tüm isteklere sahip olmak istiyorum. Bu yüzden tüm rotaya ihtiyacım var. Bunu Rails'de nasıl belirleyebilirim? Böyle bir şey mi?Ruby on Rails'de bir tüm rota nasıl oluşturulur?

match '*', to: 'subdomain_controller#show', constraints: {subdomain: /.+\.users/} 

Bu, tüm olası rotaları gerçekten yakalayacak mı? İç içe pek çok dizin bulunsa bile hiçbirinin kaymaması önemlidir.

Ruby on Rails 3.2'yi kullanma, ancak 4.0'a yükseltmeye hazır.

GÜNCELLEME: '*path' çalışıyor gibi görünüyor. Bununla birlikte, karşılaştığım sorun, dosya benim public dizininde bulunduğunda, Rails bunun yerine bunu oluşturuyor.

GÜNCELLEME:

#RAILS 3 
#make this your last route. 
match '*unmatched_route', :to => 'application#raise_not_found!' 

#RAILS 4, needs a different syntax in the routes.rb. It does not accept Match anymore. 
#make this your last route. 
get '*unmatched_route', :to => 'application#raise_not_found!' 

Ve

class ApplicationController < ActionController::Base 

... 
#called by last route matching unmatched routes. 
#Raises RoutingError which will be rescued from in the same way as other exceptions. 
def raise_not_found! 
    raise ActionController::RoutingError.new("No route matches #{params[:unmatched_route]}") 
end 
... 

end 

+0

Bu sorumun yanıtı burada olduğunu düşünüyorum: [http://stackoverflow.com/questions/4132039/rails-redirect-all-unknown-routes-to-root-url][1] [1]: http://stackoverflow.com/questions/4132039/rails-redirect-all-unknown-routes-to-root-url – ksu

+1

@ksu - bu '* path' yani? Ve sonra '' params [: yol] 'yolunu tutar? –

cevap

0

Bu Sana bu yaklaşımda küçük tweaks gerek ama noktası olsun

Calamas::Application.routes.draw do 
    get '*path', to: 'subdomain_controller#show',constraints: lambda { |request| request.path =~ /.+\.users/ } 
end 
+0

Bunu denemedim, ancak yol olarak ': subdomain' olması kafa karıştırıcı olabilir mi? Yoldaki veya alt alandaki kısıtlama o zaman mı? –

+0

Önceki cevabınız davanınızda işe yaramazdı. Güncellenmiş cevabımı görün. Belgeler burada -> http://guides.rubyonrails.org/routing.html#advanced-constraints – usha

+0

Bu, "public" dizininde bulunan kök yolları veya yolları için çalışmaz. Kök yolları çok önemli değil, rotalarımda bir root ekleyebilirim. Ama diğer sorun nasıl üstesinden geleceğimi bilmiyorum. –

18

çalışması gerekir Daha fazla bilgi onu E: https://gist.github.com/Sujimichi/2349565

+0

Bu, "public" dizininde bulunan kök yolları veya yollar için çalışmaz. Kök yolları büyük bir anlaşma değildir, rotalarımdaki dosyalara bir 'root' ekleyebilirim. Ama diğer sorun nasıl üstesinden geleceğimi bilmiyorum. –

+0

Raylar 4'te bana hata veriyor: tırmık iptal edildi! Yönelticide 'match' yöntemini bir HTTP yöntemi belirtmeden kullanmamalısınız. İşleminizi hem GET hem de POST olarak göstermek istiyorsanız, ':: [: get,: post]' seçeneğini kullanarak ekleyin. Eğer eyleminizi GET'e ifşa etmek istiyorsanız, yönlendiricideki 'get' kullanın: Yerine: yerine" controller # eylemi " Do: get" controller # action " –

+0

Evet, Rails 4'ün rotalarda farklı bir sözdizimine ihtiyacı var .rb. Artık eşleşmeyi kabul etmiyor. '* unmatched_route',: to => 'application # raise_not_found!' – TheAshwaniK