2 Temmuz 2009 Perşembe

Rails ActiveRecord Associations

ActiveRecord’ta ilişkilendirme one-to-one(1:1), one-to-many(1:n), ve many-to-many(n:m) şeklinde modellenir. ActiveRecord’ta modelleme aşağıdaki gibi isimlendirilir.
  • belongs_to (one-to-one ilişki)
  • has_one (one-to-one ilişki)
  • has_one : through (one-to-one ilişki modellerin yaratılma şekli farklı)
  • has_many (one-to-many ilişki)
  • belongs_to (one-to-many ilişki)
  • has_many :through (many-to-many ilişki)
  • has_and_belong_to_many (many-to-many modellemenin alternativ yolu)


‘belongs_to’ ilişki
one-to-one(1:1) veya one-to-many(1:n) ilişkileri modellemek için kullanılır. Foreign Key’e sahip olan modelde kullanılır.
class Ofis '<' ActiveRecord::Base
belongs_to : yonetici
end

‘has_one’ ilişki

one-to-one ilişkileri modellemek için kullanılır. İlişkinin diğer tarafını ifade eder.
class Yonetici '<' ActiveRecord::Base
has_one : ofis
end

‘has_one:through’ ilişki

class Network '<' ActiveRecord::Base
has_one : group
has_one :user, :through => : group
end

class Group '<' ActiveRecord::Base
belongs_to: network
has_one :user
end

class User '<' ActiveRecord::Base
belong_to : group
end

‘has_many’ ilişki
one-to-many ilişkileri modellemek için kullanılır.

class Yazar '<' ActiveRecord::Base
has_many : kitap //Cogul taraf buraya gelir, Bir yazarın birden çok kitabı var.
end

class Kitap '<' ActiveRecord::Base
belong_to : yazar // Bir kitap sadece bir yazara ait olabilir.
end

‘has_many :through’ ilişki
many-to-many ilişkileri modellemek için kullanılır.

class Doktor '<' ActiveRecord::Base
has_many : doktor_hasta
has_many :hasta, :through => : doktor_hasta
end

class Hasta '<' ActiveRecord::Base
has_many : doktor_hasta
has_many :doktor, :through => : doktor_hasta
end

class Doktor_Hasta '<' ActiveRecord::Base
belong_to : doktor
belong_to : hasta
end

‘has_and_belongs_to_many’ ilişki

many-to-many ilişkileri için alternativ modellemek için kullanılır.

class Doktor '<' ActiveRecord::Base
has_and_belongs_to_many : hasta
end

class Hasta '<' ActiveRecord::Base
has_and_belongs_to_many : doktor
end


Hiç yorum yok: