2017-10-13 3 views
0

J'essaie d'obtenir une ligne/lignes dans une table POSTGRES où un nom de colonne avec un trait de soulignement ("Cas_NO") correspond à une chaîne spécifique. Je ne parviens pas à formuler une requête de travail:PLUCK une ligne où le nom de la colonne postgres inclut le trait de soulignement

@array_a = ["a", "b", "c"] 
@array_b 
@array_a.each do |a| 
    @array_b << Database.where("\"BAS_No\" = ?", a).pluck(:INBC_name) 
end 

L'exécution du code ci-dessus me donne les lignes entières de la table de base de données, non seulement où « BAS_No » correspond « a » ou « b » ou « c » dans le @array_a

Répondre

0

Ce n'est pas votre vrai code. Dire ceci:

Database.where("\"BAS_No\" = ?", %w[a b c]) 

produira une clause SQL WHERE comme ceci:

where ("BAS_No" = 'a','b','c') 

et ce n'est pas SQL valide afin que vous devriez obtenir une exception ActiveRecord::StatementInvalid plutôt qu'un tas de données.

Dans tous les cas, vous ne devriez pas utiliser = avec une liste de valeurs, vous souhaitez utiliser IN et la meilleure façon d'obtenir c'est de laisser ActiveRecord construire le SQL:

Database.where(:BAS_No => a).pluck(:INBC_Name) 
#--------------^^^^^^^^^^^^ 

ou, si vous êtes allergique à hashrockets:

Database.where(BAS_No: a).pluck(:INBC_Name) 
#--------------^^^^^^^^^ 

Lorsque a est un tableau, dans la clause WHERE ceux produira IN (...) expressions et vous devriez récupérer ce que vous vous attendez.