Ruby on Rails Model Yapısı: Doğru Yapı ile Kod Kalitesini Arttırın

Ahmet AYHAN
3 min readJun 10, 2024

--

Ruby on Rails, geliştiricilere sağlam ve ölçeklenebilir web uygulamaları oluşturmak için güçlü araçlar sunar. Ancak, bir projenin başarısı sadece Rails’in sunduğu özelliklerle değil, aynı zamanda kodun düzenli, okunabilir ve sürdürülebilir olmasıyla da yakından ilgilidir. Bu yazımda, Rails modellerinde en iyi uygulamaları, kod düzenleme prensiplerini ve callback sıralamasını inceleyeceğiz.

Model Yapısı ve Sırası

Rails modelleri, belirli bir düzen ve sıra takip edilerek yazıldığında daha anlaşılır ve bakım kolaylığı sağlar. İşte bir modelin nasıl yapılandırılması gerektiğine dair kabul gören kullanım sırası:

  1. Constants (Sabitler):
  • Modelde kullanılacak sabitler en üstte tanımlanır. Sabitler, modelin davranışını veya belirli değerleri tanımlamak için kullanılır.
STATUS_ACTIVE = 'active'
STATUS_INACTIVE = 'inactive'

2. Attribute Accessors(Erişimciler):

  • attr_accessor, attr_reader, attr_writer gibi makrolar burada yer alır. Bu makrolar, modelin belirli özelliklerine erişim sağlar.
attr_accessor :temporary_token

3. Associations (İlişkiler):

  • Modeller arasındaki ilişkiler (belongs_to, has_many, has_one, has_and_belongs_to_many) burada tanımlanır.
belongs_to :company
has_many :posts
has_one :profile

4. Validations (Validasyonlar):

  • Modelin verilerinin geçerliliğini kontrol eden doğrulamalar (validates, validates_presence_of, validates_uniqueness_of) burada yer alır.
validates :username, presence: true, uniqueness: true
validates :email, presence: true, format: { with: URI::MailTo::EMAIL_REGEXP }

5. Callbacks (Geri Çağrımlar):

  • Belirli olaylar öncesinde veya sonrasında çalışan geri çağrımlar (before_validation, after_validation, before_save, after_save, before_create, after_create) burada tanımlanır.
before_validation :normalize_username
before_save :set_defaults
before_create :generate_authentication_token

6. Scopes:

  • Model için tanımlanan scope’lar (scope) burada yer alır. Scope'lar, veritabanı sorgularını basitleştirmek ve tekrar kullanılabilir hale getirmek için kullanılır.
scope :active, -> { where(status: STATUS_ACTIVE) }
scope :recent, -> { order(created_at: :desc) }

7. Class Methods (Sınıf Metotları):

  • Model sınıfına özgü metotlar burada tanımlanır. Sınıf metotları, belirli bir model sınıfı üzerinde çalışır ve genellikle veri sorgulama veya işleme işlemleri için kullanılır.
def self.search_by_email(email)
where(email: email)
end

8. Instance Methods (Örnek Metotlar):

  • Model örneklerine özgü metotlar burada tanımlanır. Bu metotlar, belirli bir model nesnesi üzerinde çalışır.
def activate!
update!(status: STATUS_ACTIVE)
end
def deactivate!
update!(status: STATUS_INACTIVE)
end

9. Private Methods (Özel Metotlar):

  • Özel metotlar private anahtar kelimesi altında tanımlanır ve sadece bu sınıf içinde kullanılır.
private
def normalize_username
self.username = username.downcase if username.present?
end
def set_defaults
self.status ||= STATUS_INACTIVE
end
def generate_authentication_token
self.auth_token = SecureRandom.hex(10)
end

Callback Çalışma Sırası

Önceki makalemde daha detaylı bahsettim ama hatırlatmakta fayda var. Rails’de callback’ler belirli bir sıra takip eder. İşte bu sıralama:

  1. before_validation: Doğrulama işlemi öncesinde çalışır.
  2. after_validation: Doğrulama işlemi sonrasında çalışır.
  3. before_save: Kayıt işlemi öncesinde çalışır (hem create hem de update için).
  4. before_create: Oluşturma işlemi öncesinde çalışır (sadece create için).
  5. after_create: Oluşturma işlemi sonrasında çalışır (sadece create için).
  6. after_save: Kayıt işlemi sonrasında çalışır (hem create hem de update için).

Bu sıralama, model üzerinde yapılan işlemlerin belirli bir düzen içinde gerçekleşmesini sağlar ve veri bütünlüğünü korur.

Sonuç olarak;

Ruby on Rails modellerinin doğru bir şekilde yapılandırılması, kodun okunabilirliğini ve bakımını kolaylaştırır. Sabitler, erişimciler, ilişkiler, doğrulamalar, callback’ler, scope’lar, sınıf metotları ve örnek metotların belirli bir sıra içinde yer alması, projelerin daha düzenli ve anlaşılır olmasını sağlar. Rails topluluğunun kabul ettiği bu kurallar, kodun diğer geliştiriciler tarafından daha kolay anlaşılmasını ve kullanılmasını sağlar. Bu yapı ve düzenleme prensiplerini takip ederek, daha sürdürülebilir ve ölçeklenebilir Rails uygulamaları geliştirebilirsiniz.

--

--