yüzden amacım bir DownloadableResource modelinden ortak özellikleri miras, birçok özellikleri paylaşan bir Kitap ve İndir modeli var.
STI bir göz vardı, ama bunun yerine abstract base model class tarafa gitti:Uygulama Özet Bankası Modeli Sınıf, Raylar Way ™
modeller:
class DownloadableResource < ActiveRecord::Base self.abstract_class = true attr_accessible :title, :url, :description, :active, :position validates :title, :url, :description, presence: true scope :active, where(active: true).order(:position) end class Book < DownloadableResource attr_accessible :cover_url, :authors validates :cover_url, :authors, presence: true end class Download < DownloadableResource attr_accessible :icon_url validates :icon_url, presence: true end
göçler: Taşıma işleminden sonra
class CreateDownloadableResources < ActiveRecord::Migration def change create_table :downloadable_resources do |t| t.string :title t.string :url t.text :description t.boolean :active, default: false t.integer :position t.timestamps end end end class CreateBooks < ActiveRecord::Migration def change create_table :books do |t| t.string :cover_url t.string :authors t.timestamps end end end class CreateDownloads < ActiveRecord::Migration def change create_table :downloads do |t| t.string :icon_url t.timestamps end end end
, ne zaman Yeni bir kitap oluşturmak için sonuç çok uzak beklenen:
> Book.new
=> #<Book id: nil, cover_url: nil, authors: nil, created_at: nil, updated_at: nil>
birileri ActiveRecord modelleri henüz farklı veritabanı tablolarına kalıcı inheritance aracılığıyla ortak kod paylaşabilir böylece Özet Bankası Modeli Sınıf teknik nasıl biraz ışık tutmak misiniz?
Tek yol, kalıtım yerine bir bileşimdir. Bazı örnek: http://rails-bestpractices.com/posts/17-extract-into-module – VadimAlekseev
Bir yan not olarak, benzer şekilde yapılandırılmış iki tablodan geçseniz bile, en azından ilk önce her şeyi oluşturarak geçişlerinizi DRY yapabilirsiniz Sadece kendi alanları ile tablolar ve daha sonra 'gibi bir şey yapıyor [: kitap ,: downloads] .each do | table | change_table tablo do | t | t.text: description # ... end end' – Janosch