2010-02-03 7 views
0

J'ai deux tables: keywords_reports et mots-clés (avec les modèles AR pertinents).La requête de recherche ActiveRecord avec jointure n'inclut pas les données de la table jointe.

keyword_reports a une colonne keyword_id, que je me sers à se joindre à la table des mots-clés comme ceci:

KeywordReport.find(:all, :joins => :keyword, :conditions => {:page_id => 10}) 

qui tire correctement les dossiers pour keyword_reports, mais ne comprend pas les données de la table mot-clé joint .

J'ai regardé le journal pour voir le SQL généré et il est en train de faire:

SELECT `keyword_reports`.* from... 

au lieu de:

SELECT * from ... 

dont il a besoin de faire pour que je puisse obtenir toutes les données . Quand je modifie manuellement le SQL pour le formater comme souhaité, il saisit toutes les données. J'ai essayé d'utiliser: includes et: select en vain. Comment empêcher la requête de limiter les résultats uniquement à la première table?

Répondre

0

pense que vous avez probablement eu une faute de frappe. :include (non) devrait le faire.

KeywordReport.find(:all, :include => :keyword, :conditions => {:page_id => 10})

Cela suppose que vous avez la configuration de la relation dans le modèle

#KeywordReport 
belongs_to :keyword 

espère que cela vous met une bonne voie

+0

Bonjour, Merci pour votre réponse. La relation est en réalité inversée. #keyword has_many: keyword_reports #KeywordReport belongs_to: mot-clé Sur cette base, je ne pense pas: include me aider. Le SQL généré est deux instructions avec la suggestion ci-dessus, et ils n'effectuent pas de jointure. La deuxième instruction essaie juste de trouver des enregistrements de mot-clé en utilisant l'opérateur IN de keyword_id retourné à partir du jeu de résultats keyword_reports. Peut-être qu'il me manque quelque chose alors tout autre conseil est apprécié. – Scott

1

J'ai eu le même problème et résolu à l'aide:

:select => '*' 

Dans mon cas cela fonctionne, juste être cau tious de colonnes avec le même nom dans les tableaux. Je pense qu'une seule colonne sera disponible. Pour résoudre ce problème, vous pouvez utiliser:

:select => '*, tbl1.field as field1, tbl2.field as field2' 

Espérons que cela aide.

Questions connexes