У мене є колекція користувачів. Кожен користувач має масив вбудованих документів: підтримка запитів.
class User < MyModel
include Mongoid::Document
embeds_many :tickets
...
end
class Ticket < MyModel
include Mongoid::Document
embedded_in :user, :inverse_of => :tickets
...
end
У розділі адміністратора я роблю запит, щоб вибрати всі запити підтримки. Але оскільки колекція квитків вбудована, я не можу запитувати безпосередньо. Це те, що я отримав:
@users_with_pending_tickets = User.only(:tickets).where("tickets.status" => "Pending")
<% for user in @users_with_pending_tickets %>
<% ticket = user.tickets.where(:status => "Pending").first %>
<%= ticket... %>
<% end %>
Це однозначно виглядає некрасиво. Чи є інший спосіб?
Відповіді:
2 для відповіді № 1Якщо вам потрібно отримати всі квитки, вам слід поїхати references_many
відношення замість вбудованих відносин.
Зрештою, MongoDB повинен підтримувати "віртуальні колекції" для вирішення цього поширеного питання, але поки що вам доведеться подолати це обмеження.
Для отримання додаткової інформації див моя відповідь на це подібне питання.