Raylar 4 ve 5
Rails 4'te, :paramtam 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.rbdosyanı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 :keyseçeneği resourceskaldı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_paramYöntemden biraz daha fazla çalışma gerektirecek . Hala rotalara özel parametreler kullanılarak tanımlanır tanımlayabilir scopeve 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 resourcesiç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 :controllerseçeneği scopeve ek scopeblokları 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.