Vì vậy, về cơ bản tôi muốn biết nếu có một số cách tiếp cận phổ biến để xác định các loại liên kết riêng. Một số chi tiết:đường ray tùy chỉnh has_many liên kết (thông qua mảng pg)
Tôi có mô hình conversations
có cột mảng PG user_ids
. Vì vậy, để lấy cuộc hội thoại người sử dụng tôi cần phải chạy: select conversations.* from conversations where USER_ID = ANY(conversations.user_ids)
Kể từ finder_sql
và bạn bè của nó đang bị phản đối bây giờ, tôi thực sự muốn biết điều gì sẽ là cách tốt nhất để thực hiện hiệp hội has_many giả này?
hiện tôi chỉ sử dụng các phương pháp như:
def conversations
Conversation.where("#{id} = ANY (conversations.users)")
end
Vì vậy, về cơ bản tôi đang nghĩ đến việc thực hiện của riêng tôi ActiveRecord::Associations::CollectionAssociation
và muốn biết nếu đang có một số tài liệu tham khảo tốt hoặc nếu bạn có thể tư vấn bắt đầu từ đâu tại
Bạn có bất kỳ kiểm soát nào đối với giản đồ không? Tôi hỏi vì sử dụng một mảng để giữ chìa khóa nước ngoài là thực hành xấu, và không chỉ vì những rắc rối nó gây ra bạn bây giờ. Thời gian _only_ bạn nên xem xét sử dụng một mảng là khi nó luôn luôn có thể được xử lý bởi cơ sở dữ liệu như là một điều không thể tách rời mà không có ý nghĩa với nó. –
đúng, tôi quyết định đi với phương pháp này chỉ vì mục đích giáo dục. Bên cạnh đó, tôi đã hoàn toàn ngạc nhiên với hiệu suất mảng. Một điều khác đã thuyết phục tôi là điều này: http://blog.2ndquadrant.com/postgresql-9-3-development-array-element-foreign-keys/, khiến tôi nghĩ rằng đó không phải là một ý tưởng tồi sau tất cả –
kể từ bạn quyết định đi với ARRAY có lẽ bạn cũng có thể đi với SQL Views? https://github.com/thoughtbot/scenic Và về cơ bản tạo ra một bảng khác mà không chuẩn hóa mảng của bạn thành một cái gì đó như: (Conversation_id, user_id) (nhiều-nhiều) để bạn có thể sử dụng bình thường có nhiều quan hệ. –