0Pricing
Ruby Academy · Ders

İlişkilendirmeler

has_many ve belongs_to

İlişkilendirmeler, CoddyKit'te ücretsiz bir Ruby Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Ruby Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Ruby Academy kursu toplamda 4 dersten oluşur.

İlişkiler Nedir?

İlişkiler, Active Record'un ilgili satırlar arasında sizin için gezinebilmesini sağlayan model ilişkilerini tanımlar. Birleştirme SQL'i yazmak yerine user.posts gibi yöntemleri çağırırsınız.

  • Veritabanınızdaki yabancı anahtarları yansıtırlar.
  • Yardımcı yöntemleri otomatik olarak oluştururlar.
  • Kodun alanı, yani uygulamanın iş konusunu yansıtır biçimde okunmasını sağlarlar.

belongs_to İlişkisi

belongs_to, bu modelin başka bir modele işaret eden bir yabancı anahtar taşıdığını belirtir. Bir Post'a ait olan Comment modelinde post_id sütunu bulunur.

class Comment < ApplicationRecord
  belongs_to :post
end

# comment.post returns the parent Post
# Requires a post_id column on comments

has_many İlişkisi

has_many ilişkinin diğer tarafıdır: Bir kayıt, başka bir türden birçok kayda sahip olur. Bir Post birçok Comment kaydına sahiptir. Yabancı anahtar, çok olan tarafta bulunur.

class Post < ApplicationRecord
  has_many :comments
end

# post.comments returns all related comments
# post.comments.create(body: "Nice!")

Yabancı Anahtarın Bulunduğu Yer

belongs_to kullanan model yabancı anahtarı taşır. Post ve Comment için comments tablosunda post_id bulunur. Bunu bir geçişte t.references :post veya add_reference ile kurun.

create_table :comments do |t|
  t.references :post, foreign_key: true
  t.text :body
  t.timestamps
end

Oluşturulan Yöntemler

has_many :comments size kullanışlı yöntemlere sahip bir koleksiyon verir:

  • Okumak için post.comments.
  • Bağlantılı bir kayıt eklemek için post.comments.create(...).
  • Saymak için post.comments.count.
  • Kimlikler için post.comment_ids.
post = Post.find(1)
post.comments.create(body: "First!")
puts post.comments.count

has_one İlişkisi

has_one, bir User modelinin bir Profile modeline sahip olması gibi bire bir bağlantıları modeller. Yabancı anahtar yine diğer modelde bulunur (profiles.user_id).

class User < ApplicationRecord
  has_one :profile
end

class Profile < ApplicationRecord
  belongs_to :user
end

through ile Çoktan Çoğa İlişki

Çoktan çoğa ilişkiler için bir birleştirme modeli ve has_many through kullanın. Bir Student, Enrollment satırları üzerinden birçok Course kaydına sahip olur.

class Student < ApplicationRecord
  has_many :enrollments
  has_many :courses, through: :enrollments
end

class Enrollment < ApplicationRecord
  belongs_to :student
  belongs_to :course
end

Bağımlı Seçenekleri

Bir üst kayıt silindiğinde alt kayıtlara ne olacağını dependent ile belirleyin:

  • dependent: :destroy alt kayıtları da siler.
  • dependent: :nullify alt kayıtların yabancı anahtarını temizler.
  • dependent: :restrict_with_error silme işlemini engeller.
class Post < ApplicationRecord
  has_many :comments, dependent: :destroy
end

N+1 Sorgu Sorunu

Kayıtlar arasında dolaşıp bir ilişkiye erişmek, kayıt başına bir sorgu çalıştırabilir; bu, korkulan N+1 durumudur. 10 gönderiyi ve ardından bunların yorumlarını yüklemek, 2 yerine 11 sorgu çalıştırabilir.

Veriler büyüdükçe bu durum uygulamaları fark edilmeden yavaşlatır.

# N+1: one query per post for comments
Post.all.each do |post|
  puts post.comments.count
end

N+1 Sorununu includes ile Çözme

includes, Active Record'a ilişkiyi birçok sorgu yerine birkaç sorguyla önceden yüklemesini söyler. Bu, N+1 sorunu için standart çözümdür.

Post.includes(:comments).each do |post|
  puts post.comments.count
end

class_name ile Özel Adlar

İlişkinin adı modelle eşleşmediğinde class_name ve foreign_key gibi seçenekleri kullanın. Örneğin User modeli tarafından desteklenen bir author ilişkisi tanımlayabilirsiniz.

class Post < ApplicationRecord
  belongs_to :author, class_name: "User"
end

Hızlı Kontrol

İlişkiler konusundaki anlayışınızı sınayın.

Özet: İlişkiler

Modelleri ilişkilendirmeyi öğrendiniz:

  • belongs_to yabancı anahtarı taşır; has_many ve has_one diğer tarafı tanımlar.
  • has_many through çoktan çoğa ilişkileri modeller.
  • dependent zincirleme silmeleri yönetir.
  • includes ile N+1 sorgularından kaçının.

Sırada doğrulamalarla veri bütünlüğünü sağlayacak ve sorgulamayı öğreneceğiz.

Sıkça Sorulan Sorular

“İlişkilendirmeler” dersi ücretsiz mi?

Evet — “İlişkilendirmeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Ruby Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Ruby Academy kursu toplamda 4 dersten oluşur.

“İlişkilendirmeler” dersinde ne öğreneceğim?

has_many ve belongs_to Ruby Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Ruby Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Ruby Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“İlişkilendirmeler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Ruby Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Ruby Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Active Record Temelleri
  2. Geçişler
  3. İlişkilendirmeler
  4. Doğrulamalar ve Sorgular
← Ruby Academy Sayfasına Dön