Если я вас правильно понимаю, у вас есть сообщения, и сообщения могут быть как видео, так и фото. как сказал Джарил, то, что у вас есть, вероятно, легче всего понять / обработать, однако, если вы хотите получить фантазию, вы можете использовать наследование одной таблицы или полиморфные ассоциации.
STI - пример (из Agile Web Development с Rails 3-е издание)
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, но вы получите обратно объекты Фото и Видео (и разместите объекты, если у вас есть сообщения, которые не являются фотографиями или видео)
не забывайте строку: введите в вашей таблице БД