Test amacıyla soyut AR sınıfının bir nesnesini oluşturmaya çalışıyorum. Böyle tanımlanan modeli en: Ben Basic.new
çalıştığınızdaRaylar 3 ActiveRecord özet nesneleri
class Basic < ActiveRecord::Base
self.abstract_class = true
def stuff
raise NotImplementedError
end
end
, alıyorum:
"Mysql2::Error: Table 'project_development.basics' doesn't exist"
normal davranış mı? Soyut AR sınıflarının, (açıkça imkansız) bir sebat olmaksızın bile gerçekleştirilmesi amaçlanmamış mıdır?
Raylar ile 1.9.2-P136 kullanılarak 3.0.4/Mysql2 0.2.6
Düzenleme:
Bu hata, sütun tanımları neden olduğu ortaya çıktı, bir durumunda da, soyut model veritabanından alınamaz.
class Basic < ActiveRecord::Base
self.abstract_class = true
@columns = []
end
Bir çekicilik gibi çalışır.
Yakut programcılar soyut sınıflardan hoşlanmazlar. Modüller dahil size uygun değil mi? http://stackoverflow.com/questions/512466/how-to-implement-an-abstract-class-in-ruby – tokland
@tokland; Gerçekten mi? Buna katılmam gerek. Soyut sınıflar çok faydalıdır ve sıklıkla kullanılır. ActiveRecord :: Base' örneğin soyut bir sınıftır. Yine de, bazı insanların soyut sınıfları kullanma şeklinin, modülleri kullanarak daha iyi sunulabileceğini kabul ediyorum. – idlefingers
@idlefingers. Özür dilerim, bu çok cesur bir ifadeydi, aslında soyut sınıflar bazı senaryolarda yararlı olabilir. – tokland