2011-12-23 10 views
11

, kod kullanır:Rails'de yönlendirme yaparken neden eşleşmeyi kullanıyorsunuz? Ruby on Rails 3 eğitimde

match '/signup', :to => 'users#new' 
match '/signin', :to => 'sessions#new' 
match '/signout', :to => 'sessions#destroy' 

match '/contact', :to => 'pages#contact' 
match '/about', :to => 'pages#about' 
match '/help', :to => 'pages#help' 

yerine

get '/signup', :to => 'users#new' 
get '/signin', :to => 'sessions#new' 
get '/signout', :to => 'sessions#destroy' 

get '/contact', :to => 'pages#contact' 
get '/about', :to => 'pages#about' 
get '/help', :to => 'pages#help' 

daha bütün yolları yalnızca HTTP fiilini GET istiyorum rağmen. Neden get (veya :via => [:get] match) 'u kullanmayın ve uygulama eylemi olarak yönlendirme eylemini sınırlandırmayın?

cevap

22

match yerine get [...]'u kullanmak için en iyi yöntem olduğunu düşünürüm. Daha önce de belirttiğiniz gibi, match hem GET hem de POST yollarını oluşturacaktır. İhtiyacınız yoksa onları neden yaratıyorsunuz?

Doğru eşleştiricileri kullanmak (alın veya gönderin) rotalarınızı temiz tutar ve uygulamanızın istenmeyen davranışlarını önlemeye yardımcı olur. Son nokta, özellikle web sayfanıza arama botları tarafından takip edilebilecek bir GET isteği bağlantısı koymak istemediğiniz POST rotaları için geçerlidir.

Güncelleştirme [2013-05-12]: Rails 4.0'dan itibaren artık required to explicitly specifiy the request method. Raylar 4.0 güncellemesi için

+5

+1. Eski bir cevabı güncellemek için zaman ayırdığınız için teşekkür ederiz. – bengem

+0

Guess şimdi, birden çok http fiil için kullanılan rotalarınız varsa 'match' daha iyidir. –

+0

@PetrosKyriakou Neden bu? Zaman zaman bir çerçeve kayması kullanmanın en iyi uygulamalarını biliyorum. Ancak, buradaki durumun böyle olduğunu düşünmüyorum. Hem "get" hem de "post" rotalarını sağlamak istiyorsanız, bunları "get" ve "post" anahtar kelimeleri kullanarak ayrı ayrı tanımlayın. Güncellenmiş yanıtta belirtildiği gibi, Rails artık sizi istek yöntemini tanımlamanıza zorluyor. Bu konuda herhangi bir değişiklikten haberdar değilim. – emrass