Datamapper'u öğrenmeye başladım ve bu konuda sevdiğim şey, modellerini gerçek miras ile yazabilmem idi.Ruby Datamapper tablosu ilişkilendirmeleri ile ilişkilendirmeler
Bu kod AçıkçasıTalk
ve için
:title
sütun oluşturun başarısız
class Event
include DataMapper::Resource
property :id, Serial
property :begin, DateTime
property :type, Discriminator
end
class Talk<Event
property :title, String
belongs_to :meeting
end
class Meeting<Event
has n, :talks
end
, ayırt edici sütun burada az bir değer taşır, çünkü: konu hakkında daha ileri olması mümkün olup olmadığını
Şimdi ben merak Bir veritabanı görünümünden, hem Talk
hem de Meeting
için ayrı tablolar olmalıdır.
Yani, sonunda, ben Event
ama muhtemel ek özelliklere sahip ve bir 0..1 ile tanımlanan aynı özelliklere paylaşmak için Talk
ve Meeting
istiyorum: n ilişkisi (Bir toplantı çeşitli temaslarda olabilir ama görüşmeler var Bir toplantı olmadan.) Kolon tanımlarını tekrarlamadan ve/veya mirastan vazgeçmeden bunu başarmanın bir yolu var mı?
başka örnek vermek gerekirse Düzenleme: miras şey genel Event
ler ayrı ayrı sorgulanabilir yani, hakkında gibi parçasını. Yani, bilmek istediğimde, belirli bir :begin
tarihinde bir şey varsa, iki veya daha fazla tabloya bakmam gerekmiyor ancak Event
tablosunu sorgulayabilirim. Bir şekilde, aşağıdaki yapı benim ihtiyaçlarına uyabiliyordu.
class Event
include DataMapper::Resource
property :id, Serial
property :begin, DateTime
end
class Talk
include DataMapper::Resource
property :id, Serial
property :title, String
belongs_to :event
belongs_to :meeting
end
class Meeting
include DataMapper::Resource
property :id, Serial
belongs_to :event
has n, :talks
end
Ancak bu kullanmak için, ben oluşturmak veya Talk
düzenlemek istediğiniz, el ile Event
her zaman yaratmak gerekir. Yani, talk.begin
veya Talk.create(:begin => Time.now)
yapamıyorum. Tüm fonksiyonları yatırmadan ve özellikleri birleştirmeden bunun etrafında bir yolu var mı? Modeli kullanırken temel yapıyı hatırlatmak istemiyorum.
Gerçek miras yoluyla hangi kalıtım türünü kastediyorsunuz? Tek Tablo Kalıtım, Sınıf Tablosu Kalıtım veya Beton Tablo Kalıtım? http://martinfowler.com/eaaCatalog/ – MattMcKnight
Ruby sınıfının mirasını kastediyorum. – Debilski
Bu ne anlama geliyorsa bilmiyorum, her Ruby modelini ayrı ayrı kullanabildiğim ve alt sınıftan ana ve arkaya atama/atayabildiğim kadarıyla - bu kadar ilgilenmiyorum. – Debilski