私があなたを正しく理解しているなら、あなたは投稿を持っています、そして投稿はビデオか写真のどちらかです。Jarylが言ったように、あなたが持っているものはおそらく理解/処理するのが最も簡単ですが、空想を得たい場合は、単一テーブル継承またはポリモフィックアソシエーションを使用できます。
STI-例(Rails 3rd Editionを使用したアジャイルWeb開発から)
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
したがって、顧客を作成する場合
Customer.create(:name => 'John Doe', :email => 'john@doe.com', :balance => 78.29)
その後、人を介してそれを見つけることができます
x = Person.find_by_name('John Doe')
x.class #=> Customer
x.email #=> john@doe.com
x.balance #=> 78.29
x.some_customer_class_method # will work because the Person.find method returned a Customer object
だからあなたは持つことができます
class Post < ActiveRecord::Base
end
class Photo < Post
end
class Video < Post
end
その後、Post.allですべてを見つけることができますが、写真とビデオのオブジェクト(写真またはビデオではない投稿がある場合は投稿オブジェクト)が返されます。
dbテーブルの文字列:typeを忘れないでください