Si je vous comprends bien, vous avez des messages et des messages peuvent être vidéo ou photo. Comme Jaryl a dit que ce que vous avez est probablement le plus facile à comprendre/gérer, cependant, si vous voulez vous faire plaisir, vous pouvez utiliser l'héritage de table unique ou des associations polymorphes.
STI - par exemple (de développement Agile Web avec 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
Donc, si vous créez un client
Customer.create(:name => 'John Doe', :email => '[email protected]', :balance => 78.29)
vous pouvez le trouver par personne
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
Donc, vous pourriez avoir
class Post < ActiveRecord::Base
end
class Photo < Post
end
class Video < Post
end
et vous pouvez les trouver par Post.all mais vous retrouverais objets photo et vidéo (et des objets post si vous avez des postes qui ne sont pas photo ou vidéo)
ne pas oublier la string: tapez dans votre table db
http://stackoverflow.com/questions/3231889/rails-sti-with-inheriting-children J'essaie de comprendre comment faire du STI un objet enfant, donc avec l'exemple donné comment je coderais " Person belongs_to: company "et" Company has_many: persons "? – Rabbott