Pergunta
1) Encontrar por exemplo objeto
Supondo que eu tenha o objeto de instância chamado @topic. Quero recuperar as respostas para este tópico fornecido. Eu estava pensando que deveria poder passar: tópicos =>@tópico, mas tive que fazer a consulta muito feia abaixo.
@answers = Answers.where(:topic_ids => {"$in" => [@topic.id]})
2) Obtendo a representação da string do ID. Eu tenho uma função personalizada (mostrada abaixo). Mas esse não deveria ser um requisito muito comum?
def sid
return id.to_s
end
Solução
Se suas associações estiverem configuradas corretamente, você poderá fazer:
@topic.answers
Parece que o acima é o que você está procurando. Certifique -se de configurar suas associações corretamente. Mongoid é muito perdoador ao definir associações, por isso pode parecer que elas são configuradas quando há de fato um problema como nomes incompatíveis em references_many
e referenced_in
.
Se houver uma boa razão para que o acima não funcione e você precise usar uma consulta, você pode usar esta consulta simples:
@answers = Answer.where(:topic_ids => @topic.id)
Isso vai corresponder a qualquer Answer
Registre cujos tópicos_ids incluem o ID fornecido. A sintaxe é a mesma para campos de matriz como para campos de valor único como Answer.where(:title => 'Foo')
. O MongoDB interpretará a consulta de maneira diferente, dependendo se o campo é uma matriz (verifique se o valor fornecido estiver na matriz) ou um único valor (verifique se o valor fornecido é uma correspondência).
Aqui estão um pouco mais de informação sobre como o MongoDB lida com consultas de matriz:http://www.mongodb.org/display/docs/advanced+queries#advancedQueries-valueinanArray