Raylar 4 ve 5
Rails 4'te, :param
tam olarak aradığınız şeyi yapıyor gibi görünen seçenek eklendi. Sen bir göz alabilir Rails 3 kod ile karşılaştırıldığında Raylar 4 kod .
Detaylar
Bunu routes.rb
dosyanıza kolayca uygulayabilirsiniz :
# config/routes.rb
resources :posts, param: :slug
# app/controllers/posts_controller.rb
# ...
@post = Post.find_by(slug: params[:slug])
# ...
Rails 4'ün piyasaya sürülmesinden itibaren, bu işlevsellik Ray Kılavuzlarında belgelenmiştir .
Raylar 3
Maalesef, Rails 3'te :key
seçeneği resources
kaldırıldı, bu nedenle bu şekilde oluşturulan rotaların adını artık yalnızca fazladan bir seçeneği geçerek kolayca değiştiremezsiniz.
Detaylar
Geçtiğimiz yıl uygulamayı istediğiniz şekilde çalıştırdığınızı varsayıyorum, ancak Rails 3 in routes.rb
. to_param
Yöntemden biraz daha fazla çalışma gerektirecek . Hala rotalara özel parametreler kullanılarak tanımlanır tanımlayabilir scope
ve match
(veya 's kuzenleri get
, put
, post
, ve delete
). Eşleştiricide istediğiniz parametre adını yazmanız yeterlidir:
get 'clients/:client_name', :to => 'clients#show', :as => client
scope 'clients/:client_name' do
get 'sites/:name', :to => 'sites#show', :as => site
end
Sizin resources
için otomatik olarak oluşturulan tüm rotaları manuel olarak eklemeniz gerekir , ancak bu, aradığınız şeye ulaşır. Yinelemenin bir kısmını çıkarmak için :controller
seçeneği scope
ve ek scope
blokları etkili bir şekilde kullanabilirsiniz .
DÜZENLEME (8 Mayıs 2014): Cevabın hem Rails 3 hem de 4 için bilgi içerdiğini daha açık hale getirin. Tam satır numaralarına gitmek için koda giden bağlantıları güncelleyin ve daha uzun süre çalışmaları için taahhütleri gerçekleştirin.
DÜZENLEME (16 Kasım 2014): Rails 4 şu anda en üstte olmalı ve oldukça uzun bir süredir Rails'in güncel sürümü olduğundan ilgili bilgileri içermelidir.
DÜZENLEME (9 Ağustos 2016): Çözümün hala Rails 5'te çalıştığını düşünün ve eski bağlantıları güncelleyin.