2010-11-24 5 views
1

1) Recherche par objet d'instanceQuestions de syntaxe Mongoid

En supposant que j'ai l'objet d'instance appelé @topic. Je veux récupérer les réponses pour ce sujet donné. Je pensais que je devrais être capable de transmettre: topics => @ topic, mais j'ai dû faire la requête très laide ci-dessous.

@answers = Answers.where(:topic_ids => {"$in" => [@topic.id]}) 

2) Obtenir la représentation sous forme de chaîne de l'ID. J'ai une fonction personnalisée (montrée ci-dessous). Mais ne devrait-il pas être une exigence très commune?

def sid 
    return id.to_s 
    end 

Répondre

2

Si vos associations sont configurées correctement, vous devriez être en mesure de le faire:

@topic.answers 

On dirait que ce qui précède est ce que vous recherchez. Assurez-vous que vous avez correctement configuré vos associations. Mongoid est très tolérant lors de la définition d'associations, il peut donc sembler qu'elles soient correctement configurées lorsqu'il y a un problème comme des noms incompatibles dans references_many et referenced_in.

S'il y a une bonne raison pour laquelle le précède ne fonctionne pas et vous devez utiliser une requête, vous pouvez utiliser cette requête simple:

@answers = Answer.where(:topic_ids => @topic.id) 

Cela correspond à tout Answer enregistrement dont topic_ids inclure l'ID fourni . La syntaxe est la même pour les champs de tableau que pour les champs à valeur unique tels que Answer.where(:title => 'Foo'). MongoDB interprétera la requête différemment selon que le champ est un tableau (vérifiez si la valeur fournie est dans le tableau) ou une seule valeur (vérifiez si la valeur fournie est une correspondance).

est ici un peu plus d'informations sur la façon dont MongoDB gère les requêtes de tableau: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray

+0

hmmm, l'exemple que vous avez donné ne semble pas fonctionner - ce que je fais quelque chose de mal? @answers = @ user.answers.where (: topic_ids.in => @ topic.id) –

+0

Désolé, je vous ai conduit sur le mauvais chemin. Vous ne devriez pas utiliser l'opérateur '$ in' (ou l'extension' .in' Mongoid Symbol) pour ce type de requête. S'il vous plaît voir la réponse mise à jour. – bowsersenior