Tôi có một kịch bản như thế này:mongoid - sử dụng bao gồm để chọn trẻ em các đối tượng trong một mối quan hệ 1..N tham chiếu
blog.posts
trong đó mỗi bài thuộc về đối tượng khác, nói Tag (trong một belongs_to, mối quan hệ has_many), vì vậy tôi có thể làm:
tag.posts
để ngăn chặn vấn đề N + 1, tôi muốn để có thể làm blog.posts, mà còn lấy mỗi thẻ đi kèm với mỗi bài, vì vậy mà hai truy vấn được tạo ra, một cho bài viết và một cho tất cả các thẻ (dựa trên mỗi tag_id thuộc bài đăng).
tôi nhận thấy trong tài liệu mongoid tôi có thể làm:
Post.includes(:tag).where(:blog_id: blog.id)
mà sẽ làm cho tôi tất cả các bài viết thuộc về một blog, và cũng nhận được mỗi thẻ liên quan đến bưu chính đưa vào bản đồ sắc (với điều kiện đó là đã bật).
Vấn đề là, tôi muốn làm:
blog.posts
và bằng cách nào đó xác định lại truy vấn để làm những gì tôi muốn ở trên. Có cách nào làm được việc này không?
Hiện nay tôi đang giảm nhẹ này bằng cách định nghĩa một phần mở rộng:
has_many :posts do
def with_tags
includes(:tag)
end
end
vì vậy mà tôi làm
blog.posts.with_tags
nhưng tôi muốn rằng
blog.posts
hiện trên theo mặc định.
Chúc mừng.
có cách nào khác để thực hiện việc này không? tức là từ một đối tượng mongoid? – K2xL