Comment voulez-vous faire un Rails 3 sélectionnez À l'aide de clauses where
Je suis à l'aide de Rails 3 et j'ai besoin de faire un select où la clé primaire de dossiers est EN résultant select précédente. Vous pouvez le faire facilement à l'aide de droites SQL à l'aide de un DANS. Ici est évidemment la mauvaise voie, j'ai fait ce dont j'ai besoin. Ce que les Rails de chemin à faire ce bien:
@task = Link.find(params[:id])
clients = Client.where('task_id = ?',@task.id).select('DISTINCT(company_id)')
company_list = []
clients.each do |client|
company_ids << client.company_id
end
@companies = Company.where(:id => company_ids)
Vous devez vous connecter pour publier un commentaire.
Comme d'autres l'ont mentionné que j'avais utiliser joindre dans ce cas. La syntaxe d'utilisation de "de" est également très simple, si par exemple
Mise à jour
En fait c'est même plus simple que maintenant (je pense rails 3+), vous pouvez le faire
Ce n'est pas la réponse à votre question sur "sélectionnez À l'aide de clauses where", mais je pense que l'ensemble de votre script peut être réécrite sous une ligne à l'aide de
joint
. Cela devrait donner le même résultat que votre extrait de code ci-dessus:Je crois que cela va faire ce que vous demandez:
Vous pouvez visualiser le sql par virement de bord .to_sql sur la fin dans la console.
La syntaxe de jointure dans mischa réponse est probablement plus lisible si.
Je pense que le problème peut être que vous avez company_list et company_ids. Je m'attends à ce company_ids dans l'itérateur de retourner quelque chose comme:
Je pense que je pourrais écrire ce genre:
Vous pouvez tout simplement utiliser les trouver, comme une recherche par id accepte l'id (1), une liste d'id (1, 5, 6), ou un tableau d'id ([5, 6, 10]), voir: http://apidock.com/rails/ActiveRecord/Base/find/class