Wenn ich Sie richtig verstehe, haben Sie Beiträge und Beiträge können entweder Video oder Foto sein. wie Jaryl sagte, was Sie haben, ist wahrscheinlich am leichtesten zu verstehen/zu handhaben, aber wenn Sie Lust auf Fantasie haben wollten, könnten Sie Single-Table-Vererbung oder polymophische Assoziationen verwenden.
STI - Beispiel (von Agile Web Development mit Rails 3rd Edition)
create_table :people, :force => true do |t|
t.string :type
#common attributes
t.string :name
t.string :email
#attributes for type=Customer
t.decimal :balance, :precision => 10, :scale => 2
#attributes for type=Employee
t.integer :reports_to
t.integer :dept
#attributes for type=Manager
#none
end
class Person < ActiveRecord::Base
end
class Customer < Person
end
class Employee < Person
belongs_to :boss, :class_name => "Manager", :foreign_key => :reports_to
end
class Manager < Person
end
Wenn Sie also ein Kunde
Customer.create(:name => 'John Doe', :email => '[email protected]', :balance => 78.29)
Sie es per Person finden können dann erstellen
x = Person.find_by_name('John Doe')
x.class #=> Customer
x.email #=> [email protected]
x.balance #=> 78.29
x.some_customer_class_method # will work because the Person.find method returned a Customer object
So könnten Sie
haben
class Post < ActiveRecord::Base
end
class Photo < Post
end
class Video < Post
end
und dann könnte man sie alle mit Post.All finden, aber Sie würden Photo und Video-Objekte zurück (und Post-Objekte, wenn Sie Beiträge, die nicht Foto oder Video)
nicht zu vergessen die string: Geben Sie Ihre db-Tabelle ein
http://stackoverflow.com/questions/3231889/rails-sti-with-inheriting-children Ich versuche herauszufinden, wie die STI ein Kind-Objekt, also mit dem gegebenen Beispiel, wie würde ich Code " Person gehört zu: Firma "und" Firma hat viele: Personen "? – Rabbott