7

Tôi hơi bối rối về một liên kết đa hình mà tôi có. Tôi cần một mô hình Điều để có một hình ảnh tiêu đề, và nhiều hình ảnh, nhưng tôi muốn có một mô hình Hình ảnh duy nhất. Để làm cho vấn đề trở nên khó hiểu hơn, mô hình Hình ảnh có tính đa hình (để cho phép các tài nguyên khác có nhiều hình ảnh).Hiệp hội đa hình với nhiều hiệp hội trên cùng một mô hình

Tôi đang sử dụng phối hợp này trong mô hình Điều tôi:

class Article < ActiveRecord::Base 
    has_one :header_image, :as => :imageable 
    has_many :images, :as => :imageable 
end 

Đây có phải là có thể? Cảm ơn.

+6

has_one là đường synctactic cho has_many: limit => 1 –

+0

có thể trùng lặp của [Rails Polymorphic Association với nhiều liên kết trên cùng một mô hình] (http://stackoverflow.com/questions/2494452/rails-polymorphic-association-with -multiple-associations-on-the-same-model) –

Trả lời

4

Đúng. Điều đó hoàn toàn có thể.

Bạn có thể cần chỉ định tên lớp cho header_image vì không thể suy ra được. Bao gồm :dependent => :destroy quá, để đảm bảo rằng những hình ảnh bị phá hủy nếu bài viết được lấy ra

class Article < ActiveRecord::Base 
    has_one :header_image, :as => :imageable, :class_name => 'Image', :dependent => :destroy 
    has_many :images, :as => :imageable, :dependent => :destroy 
end 

sau đó ở đầu bên kia ...

class Image < ActiveRecord::Base 
    belongs_to :imageable, :polymorphic => true 
end 
+0

Thật tuyệt vời, cảm ơn bạn! –

+0

Tôi trễ năm năm, nhưng để tham khảo trong tương lai, hãy xem [câu hỏi và câu trả lời này] (http://stackoverflow.com/questions/2494452/rails-polymorphic-association-with-multiple-associations-on-the -same-model). – Sooie

+0

Tạm dừng điều này làm câu trả lời được chấp nhận. Giải pháp này không hoạt động, xem bình luận ở trên bởi @Sooie. Giải pháp thực sự là: http://stackoverflow.com/questions/2494452/rails-polymorphic-association-with-multiple-associations-on-the-same-model – tommyalvarez

6

Tôi cố gắng này, nhưng sau đó header_image trả về một trong những hình ảnh . Đơn giản vì bảng hình ảnh không chỉ định loại hình ảnh sử dụng khác (header_image so với hình ảnh bình thường). Nó chỉ đơn giản nói: imageable_type = Hình ảnh cho cả hai cách sử dụng. Vì vậy, nếu không có thông tin được lưu trữ về loại sử dụng, ActiveRecord không thể phân biệt được.

+0

Bạn cần kế thừa bảng đơn – BlackTea

Các vấn đề liên quan