Eu tenho uma coleção de usuários. Cada usuário tem uma série de documentos embutidos: solicitações de suporte.
class User < MyModel
include Mongoid::Document
embeds_many :tickets
...
end
class Ticket < MyModel
include Mongoid::Document
embedded_in :user, :inverse_of => :tickets
...
end
Na seção de administração, faço uma consulta para selecionar todas as solicitações de suporte. Mas, como a coleção de ingressos está incorporada, não posso consultar diretamente. Isto é o que consegui:
@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 %>
Isso definitivamente parece feio. Existe outra maneira?
Respostas:
2 para resposta № 1Se você precisar recuperar todos os tíquetes, deve ir para um references_many
relação em vez de um relacionamento embutido.
O MongoDB deve, eventualmente, oferecer suporte a "coleções virtuais" para resolver esse problema comum, mas, por enquanto, você deve contornar essa limitação.
Para mais informações, consulte minha resposta a esta pergunta semelhante.