Xem nhận xét để cập nhật.Đường ray: Nhiều mối quan hệ đa hình
Tôi đã đấu tranh để có được câu trả lời rõ ràng và thẳng thắn về vấn đề này, tôi hy vọng lần này tôi sẽ hiểu! : D Tôi chắc chắn có rất nhiều thứ để học vẫn còn với Rails, tuy nhiên tôi hiểu vấn đề tôi đang đối mặt và sẽ thực sự đánh giá cao sự trợ giúp bổ sung.
- Tôi có một mô hình gọi là "Tác vụ".
- Tôi có một mô hình trừu tượng có tên là "Mục tiêu".
- Tôi muốn liên hệ nhiều phiên bản của các lớp con của Target to Task.
- Tôi không sử dụng thừa kế bảng đơn.
- Tôi muốn truy vấn mối quan hệ đa hình để trả về một tập kết quả hỗn hợp của các lớp con của Target.
- Tôi muốn truy vấn từng cá thể các lớp con của Mục tiêu để có được các tác vụ mà chúng có mối quan hệ với.
Vì vậy, tôi hình nhiều mối quan hệ nhiều mối quan hệ giữa Nhiệm vụ và các lớp con của Mục tiêu theo thứ tự. Cụ thể hơn, tôi sẽ có thể làm những việc như thế này trong giao diện điều khiển (và dĩ nhiên là ở nơi khác):
task = Task.find(1)
task.targets
[...array of all the subclasses of Target here...]
Nhưng! Giả sử mô hình "Store", "Phần mềm", "văn phòng", "xe", đó là tất cả các lớp con của "Target" tồn tại, nó sẽ được tốt đẹp cũng phải đi qua các mối quan hệ theo một hướng khác:
store = Store.find(1)
store.tasks
[...array of all the Tasks this Store is related to...]
software = Software.find(18)
software.tasks
[...array of all the Tasks this Software is related to...]
Các bảng cơ sở dữ liệu ngụ ý bởi các mối quan hệ đa hình dường như có khả năng làm traversal này, nhưng tôi thấy một số chủ đề lặp đi lặp lại trong cố gắng tìm một câu trả lời mà tôi đánh bại tinh thần của các mối quan hệ đa hình:
- Sử dụng ví dụ của tôi vẫn còn, người xuất hiện muốn xác định Cửa hàng, Phần mềm, Văn phòng, Phương tiện trong Công việc, mà chúng tôi có thể nói ngay lập tức không phải là mối quan hệ đa hình vì nó là chỉ trả về một loại mô hình.
- Tương tự như điểm cuối cùng, mọi người vẫn muốn xác định Cửa hàng, Phần mềm, Văn phòng và Phương tiện trong Công việc theo hình dạng hoặc hình thức một chiều. Các bit quan trọng ở đây là mối quan hệ là mù để subclassing. Dạng đa hình của tôi ban đầu sẽ chỉ được tương tác với các mục tiêu, không phải là các kiểu lớp con riêng lẻ của chúng. Xác định mỗi phân lớp trong Task một lần nữa bắt đầu ăn đi với mục đích của mối quan hệ đa hình.
- Tôi thấy rằng một mô hình cho bảng kết nối có thể theo thứ tự, điều đó có vẻ hơi đúng với tôi, ngoại trừ việc nó thêm một số phức tạp mà tôi cho là Rails sẽ sẵn sàng bỏ đi. Tôi rất thiếu kinh nghiệm về điều này.
Dường như đây là một lỗ nhỏ trong chức năng đường ray hoặc kiến thức cộng đồng tập thể. Vì vậy, hy vọng stackoverflow có thể biên niên sử tìm kiếm của tôi cho câu trả lời!
Nhờ tất cả những người trợ giúp!
Trong sáu điểm đạn của bạn, năm trong số đó là tầm thường để đạt được nếu bạn thả thứ sáu, "Tôi không sử dụng thừa kế bảng duy nhất". Về điểm của bạn trên STI bên dưới, vì các cột bổ sung thực sự gây lỗi cho bạn, hãy cân nhắc sử dụng ủy quyền để đẩy dữ liệu và hành vi bổ sung vào các mô hình khác. – austinfromboston
Đẩy nó ra ngoài là những gì dẫn đến điều này. STI mặc dù không phải là một lựa chọn. Tôi ước nó là bởi vì, vâng ... Mọi người đều là một fan hâm mộ lớn của nó. Nhưng tôi muốn dữ liệu được lưu trữ được gắn kết và sẽ có khá nhiều loại Mục tiêu khác nhau. Tôi vẫn thấy nó hơi nổi bật rằng không có cách nào để kéo một bộ sưu tập hỗn hợp như thế này. Thiết kế của tôi có vẻ khá âm thanh. –
Tôi đã có thể thực hiện hầu hết các chức năng mà tôi mong muốn thông qua việc sử dụng has_many_polymorphs. Giới hạn còn lại là tôi vẫn bị kẹt xác định từng loại đa hình trong bố mẹ của tôi (Tác vụ). Các giải pháp bổ sung đều được chào đón, nhưng tôi không chắc chắn một giải pháp sẽ xuất hiện cho đến khi có phiên bản mới của đường ray hoặc cập nhật cho has_many_polymorphs! –