R.Reddington

WFN Üye
Konular
562
Mesajlar
562
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Kastamonu
Web Sitesi
Var
Alanı
Sosyal Backlink
1/1
Konu sahibi
Rails’te “No route matches” hatasını çözmek için önce hata mesajındaki HTTP yöntemini ve yolu uygulamanızın tanımlı rotalarıyla karşılaştırın. bin/rails routes çıktısında eşleşme yoksa veya yöntem farklıysa config/routes.rb dosyasındaki rotayı düzeltin; hata bir bağlantı ya da yönlendirme üretirken çıkıyorsa kullanılan yol yardımcısına ve parametrelere bakın. Düzeltmeden sonra rotaları yeniden listeleyip isteği aynı yöntem ve yolla tekrar deneyin.

Hatanın nerede oluştuğunu belirleyin​


Hata metninde genellikle eşleşmeyen yol ve HTTP yöntemi, örneğin GET /articles/12, görünür. Hata bir form gönderiminde veya doğrudan URL isteğinde çıkıyorsa Rails’in bu isteği hangi controller ve action’a yönlendireceğini bulamadığı anlamına gelir. Bir sayfa oluşturulurken bağlantı veya yönlendirme üretilirken çıkıyorsa uygulamanın istediği URL’yi oluşturacak rota ya da gerekli parametre eksik olabilir. Bu iki durumu birbirinden ayırın: İlki gelen isteğin rotasını, ikincisi uygulamanın URL üretimini kontrol etmeyi gerektirir.

Proje dizininde rotaları listeleyin:

Bash:
bin/rails routes

Çıktıda hata mesajındaki yolu ve HTTP yöntemini arayın. Rota satırlarında genellikle yöntem, yol, rota adı ve controller/action bilgileri bulunur. Büyük çıktıda aramak için Unix benzeri kabuklarda bin/rails routes | grep articles kullanabilirsiniz; articles yerine hatadaki yolun ayırt edici bölümünü yazın. Windows kabuğunda grep yoksa tam çıktıyı inceleyin veya kabuğun arama aracını kullanın.

Yol ve HTTP yöntemini eşleştirin​


Bir rotanın yalnızca yolunun benzemesi yeterli değildir; istek yöntemi de rotayla eşleşmelidir. Örneğin aşağıdaki bildirim, makale listesi için GET /articles ve yeni makale oluşturma isteği için POST /articles rotalarını üretir:

Ruby:
# config/routes.rb
resources :articles

POST /articles isteği gönderiyorsanız fakat rotalar listesinde yalnızca GET /articles gibi bir tanım varsa, formun method değerini ve rota bildirimini kontrol edin. Formun hangi yöntemi gönderdiğini tarayıcı geliştirici araçlarından veya uygulama logundan doğrulayın; eylem için uygun REST rotasını tanımlayın ya da formu mevcut rotanın yöntemine göre düzeltin. Rotayı değiştirdikten sonra bin/rails routes çıktısında yöntemin ve yolun göründüğünü doğrulayın.

Rotanın bulunup bulunmadığını ve hangi noktayı kontrol edeceğinizi şu şekilde ayırabilirsiniz:
Gözlenen durumKontrol edilecek yer
Yol hiç listelenmiyorconfig/routes.rb içindeki rota bildirimi ve rota kapsamı
Yol var, yöntem farklıFormun veya istemcinin gönderdiği HTTP yöntemi
Rota var, URL üretimi hata veriyorYol yardımcısı ve gereken parametreler
Yalnız bazı kayıt kimliklerinde hataİsteğin gerçekten doğru yolu ve mevcut kaydı kullanıp kullanmadığı
Rota listesinde doğru yöntem ve yol görünüyorsa bu, controller action’ın doğru çalıştığını veya ilgili kaydın veritabanında bulunduğunu kanıtlamaz. Bu durumda hatanın tam metnini ve logdaki isteği inceleyin; uygulama rota eşleştirmesini geçmiş olabilir, fakat daha sonraki bir işlem başarısız olmuş olabilir.

Rota bildirimi ve parametreleri düzeltin​


Rotayı bulamadıysanız config/routes.rb içindeki tanımın gelen yol ile aynı yapıda olduğundan emin olun. Örneğin /articles/12 yolu bir show action’ına yönlendirilecekse kaynak rotası tanımlı olmalıdır:

Ruby:
# config/routes.rb
resources :articles, only: [:show]

Bu bildirim /articles/:id biçimindeki yolu oluşturur. URL üretirken article_path(@article) gibi bir yol yardımcısı kullanmak, kimlik parametresini elle birleştirme hatalarını azaltır. Özel bir rota kullanıyorsanız dinamik parçanın adını kontrol edin: get "articles/:id", to: "articles#show" tanımında beklenen parametre id olur; URL yardımcısına ilgili kaydı veya id değerini vermeniz gerekir.

Rotayı bir namespace, scope veya iç içe kaynak altında tanımladıysanız, rota listesinde görünen gerçek önek ve yardımcı adını esas alın. Örneğin yönetim alanındaki rota /admin/articles/:id olabilir; /articles/:id istemek aynı rotayla eşleşmez. Benzer biçimde, kaynak adı tekil-çoğul farklılığı veya rotadaki kısıtlar (constraints) beklenmeyen bir yolun eşleşmesini engelleyebilir. Yalnız rota listesindeki gerçek tanıma göre düzeltme yapın; aynı yolu karşılayan yeni bir rota ekleyerek belirsizlik yaratmayın.

Düzeltmeyi doğrulayın​


config/routes.rb değişikliğini kaydedin, bin/rails routes komutunu yeniden çalıştırın ve beklenen HTTP yöntemi, yol ve action’ın listelendiğini kontrol edin. Ardından isteği aynı yöntemle tekrar gönderin. Hata sürüyorsa hata mesajındaki tam yöntemi ve yolu, ilgili rota satırını ve isteğin nereden geldiğini (form, bağlantı, yönlendirme veya doğrudan URL) birlikte inceleyin. Kimlik içeren URL veya logları paylaşmanız gerekirse oturum belirteçlerini, kişisel verileri ve gizli parametreleri çıkarın; tanı amacıyla geçici olarak açtığınız ayrıntılı loglamayı iş bittiğinde kapatın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic