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
Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top