Mam scenariusz tak:mongoid - używając obejmuje wybierz dzieci obiektów w relacji 1..n odwołuje
blog.posts
gdzie każdy słup należy do innego obiektu, powiedzmy Tag (w relacji has_many, belongs_to), więc mogę zrobić:
tag.posts
aby uniknąć problemu N + 1, chcę być w stanie zrobić blog.posts, ale również złapać każdego tagu skojarzonego z każdym poście, tak, że dwa zapytania są generowane, jeden dla postów i jeden dla wszystkich tagów (na podstawie każdego tag_id należącego do postu).
zauważyłem w mongoid dokumentacji mogę zrobić:
Post.includes(:tag).where(:blog_id: blog.id)
który dostanie mi wszystkie posty należące do bloga, a także coraz każdego znacznika związanego ze stanowiskiem i oddanie na mapie tożsamości (pod warunkiem, że jest włączone).
Problem polega na tym, chcę zrobić:
blog.posts
i jakoś przedefiniować zapytanie robić co chcę powyżej. Czy jest jakiś sposób na zrobienie tego?
W tej chwili mam łagodzenia to poprzez zdefiniowanie rozszerzenia:
has_many :posts do
def with_tags
includes(:tag)
end
end
tak, że robię
blog.posts.with_tags
ale wolałbym że
blog.posts
robi powyżej domyślnie.
Pozdrawiam.
Czy jest jakiś inny sposób na zrobienie tego? tj. z obiektu mongoid? – K2xL