Nếu tôi hiểu chính xác bạn, bạn có Bài đăng và bài đăng có thể là video hoặc ảnh. như Jaryl cho biết những gì bạn có có lẽ là dễ hiểu nhất/xử lý tuy nhiên nếu bạn muốn có được ưa thích, bạn có thể sử dụng đơn thừa kế bảng hoặc các hiệp hội polymophic.
STI - ví dụ (từ Agile Phát triển Web với 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
Vì vậy, nếu bạn tạo ra một khách hàng
Customer.create(:name => 'John Doe', :email => '[email protected]', :balance => 78.29)
sau đó bạn có thể tìm thấy nó thông qua người
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
Vì vậy, bạn có thể có
class Post < ActiveRecord::Base
end
class Photo < Post
end
class Video < Post
end
và sau đó bạn có thể tìm thấy tất cả chúng bằng Post.all nhưng bạn sẽ nhận lại hình ảnh và video đối tượng (và sau đối tượng nếu bạn có bài viết mà không phải là hình ảnh hoặc video)
không quên chuỗi: nhập vào bảng db của bạn
http://stackoverflow.com/questions/3231889/rails-sti-with-inheriting-children Tôi đang cố gắng tìm ra cách để có STI đối tượng con, vì vậy với ví dụ đã cho, tôi sẽ viết mã như thế nào " Người thuộc_to: company "và" Company has_many: persons "? – Rabbott