ActiveRecord::RecordNotFound Hatası Nedir?
Diyelim ki bir blog uygulaması geliştiriyorsunuz ve her yazıya tıklandığında ilgili yazıyı görüntülemeye çalışıyorsunuz. Ancak yazıyı veritabanında bulamıyorsunuz, işte burada `ActiveRecord::RecordNotFound` hatası devreye giriyor.
# Örnek:
# app/controllers/posts_controller.rb
class PostsController < ApplicationController
def show
@post = Post.find(params[:id])
end
end
```
Bu kodda, `Post.find` ile verilen `id`'ye göre veri tabanında bir kayıt arıyoruz. Eğer verilen `id`'ye sahip bir kayıt yoksa, işte o zaman `ActiveRecord::RecordNotFound` hatasını alırız.
Hata Yönetimi: İyi Bir Geliştirici Olmanın Yolu
Bir hata meydana geldiğinde, uygulamanın çökmesini engellemek ve kullanıcıya anlamlı bir mesaj göstermek iyi bir kullanıcı deneyimi sağlar. Bu amaçla `find` yerine `find_by` kullanarak hatayı yönetebilirsiniz.
```ruby
# app/controllers/posts_controller.rb
class PostsController < ApplicationController
def show
@post = Post.find_by(id: params[:id])
if @post.nil?
flash[:alert] = "Yazı bulunamadı."
redirect_to posts_path
end
end
end
```
Burada, `Post.find_by` kullanarak, `nil` döndüğünde hata mesajı ile kullanıcıyı yönlendiriyoruz. Bu, uygulamanızın daha sağlam ve kullanıcı dostu olmasını sağlar.
Rails’te, global hata yönetimi için `rescue_from` kullanarak uygulama genelinde hataları yakalayabilirsiniz. Eğer belirli bir hata türü üzerinde işlem yapacaksanız, şu şekilde bir çözüm sunabilirsiniz:
```ruby
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
private
def record_not_found
flash[:alert] = "Kayda ulaşamadık. Lütfen tekrar deneyin."
redirect_to root_path
end
end
```
Bu yöntemle, herhangi bir `RecordNotFound` hatası oluştuğunda, kullanıcıyı anında bilgilendirip ana sayfaya yönlendirebilirsiniz.
Daha İyi Bir Deneyim İçin
Rails, hata mesajlarını `flash` ile gösterebilme imkanı sunar. Bu sayede kullanıcıya hata hakkında bilgi verebilirsiniz. Örneğin, yukarıdaki gibi kullanıcıyı bir hata mesajıyla yönlendirmenin yanı sıra, hata mesajını sayfanın üst kısmında göstererek kullanıcının ne olduğunu anlamasını kolaylaştırabilirsiniz.
```erb
<% if flash[:alert] %>
<%= flash[:alert] %>
<% end %>
```