2009-10-21 14 views

cevap

66

Raylar, Tekli Tablo Kalıtımını destekler. AR docs itibaren

:

Aktif Record ( Base.inheritance_column üzerine yazarak değiştirilebilir) varsayılan "tip" adlı tarafından bir sütunda sınıfın adını depolayarak tarafından miras verir .

class Company < ActiveRecord::Base; end 
class Firm < Company; end 
class Client < Company; end 
class PriorityClient < Client; end 

Eğer Firm.create do (: name => "37signals"), bu kayıt tip = "Firma ile şirketlere tabloda kaydedilecektir Bu miras bu gibi bakarak o demektir ". Daha sonra bu satırı Company.find (: önce, "name =‘ 37signals "") kullanarak tekrar getirebilir ve bir Firm nesnesini döndürür. Eğer tabloda tanımlanan bir türü sütun yoksa

, tek masa miras tetiklenir edilmeyecektir. Bu durumda, alt sınıflarında olduğu gibi, alt sınıflarında, aralarında ayrım yapan için ya da aralığına özgü bir sihir gibi çalışabilirsiniz.

Oldukça iyi öğretici burada: http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance/

15

Modeller:

class Animal < ActiveRecord::Base; end 
class Dog < Animal; end 
class Cat < Animal; end 

Göç:.

class CreateAnimals < ActiveRecord::Migration 
    def self.up 
    create_table :animals do |t| 
     # Other attributes... 
     t.string :type 
    end 
    end 

    def self.down 
    drop_table :animals 
    end 
end 
6

ActiveRecord tek tabloya haritalama miras hiyerarşileri destekler (Single-table inheritance Tablo olur adını taşıyan bir sütun type var ctual sınıfı ve diğer sınıfa özel sütunları seçmek için kullanılır.

here numaralı belgede gösterildiği gibi çok tablo devralma eşlemesi uygulamak mümkündür, ancak bu özel yol taşınabilir değildir, AFAIK.