Im có một chút vấn đề thiết lập một Rails has_many: thông qua: mối quan hệ đa hình.Đặt tên cho một Rails has_many: thông qua: mối quan hệ đa hình
Tôi biết chủ đề này là welldocumented trên SO nhưng tôi nghĩ rằng vấn đề của tôi là xuống mô hình của tôi và tên nước ngoài trái ngược với cú pháp tức là tôi nghĩ rằng đây là một "tôi đã nhìn vào mã quá dài" vấn đề chỉ cần một bộ mắt khác.
Dù sao tôi có các thiết lập sau:
class Milestone < ActiveRecord::Base
has_many :responsible_items, :as => :responsibility
has_many :responsible, :through => :responsible_items
end
class ResponsibleItem < ActiveRecord::Base
belongs_to :responsible, :class_name => "User"
belongs_to :responsibility, :polymorphic => true
end
class User < ActiveRecord::Base
has_many :responsible_items, :foreign_key => :responsible_id
has_many :responsibilities, :through => :responsible_items
end
Điều này dường như làm việc tốt, mà không có lỗi, từ phía Milestone của sự vật. Ví dụ: trong thiết bị đầu cuối tôi có thể viết:
Milestone.first.responsible
... và nhận bộ sưu tập trống như tôi mong đợi.
Tuy nhiên, từ phía bên tài của sự vật, chạy:
User.first.responsibilities
... được trả lại một lỗi AR:
ActiveRecord::HasManyThroughAssociationPolymorphicSourceError: Cannot have a has_many :through association 'User#responsibilities' on the polymorphic object 'Responsibility#responsibility'.
Tôi giả định vấn đề này là một cái gì đó để làm với thực tế là tôi đang đề cập đến mối quan hệ Người dùng là: trách nhiệm. Thê nay đung không?
Bất kỳ trợ giúp nào cũng sẽ được đánh giá cao, cảm ơn.
các mô hình ở phía bên kia của mối quan hệ đa hình là gì? nó chỉ là sự kiện quan trọng hay bất kỳ mô hình nào khác? và khi bạn đang làm User.first.responsibilities bạn đang mong đợi để có được các đối tượng Milestone? thuộc về: trách nhiệm,: polymorphic => true – Abid
Sẽ có các mô hình khác trong mối quan hệ đa hình nhưng Milestone là người duy nhất tôi đã xây dựng cho đến nay. Khi tôi làm 'User.first.responsibilities' tôi đang chờ các đối tượng Milestone có. – Pete
Ah ok @Abid bạn đã khiến tôi suy nghĩ về câu hỏi của bạn. Tôi tự nhiên sẽ không thể rút ra một tập hợp các 'trách nhiệm' thông qua mối quan hệ đa hình vì chúng đều thuộc về các đối tượng khác nhau. Kết quả là tôi phải cụ thể hơn về Mô hình người dùng và nêu rõ những trách nhiệm nào tôi muốn có nghĩa là: 'has_many: milestone_responsibilities,: through =>: responsibility_items,: source =>: responsibility,: source_type => 'Milestone'' – Pete