que je fais concaténation de chaîne:carte conditionnelle de Hash avec joindre à concaténer une chaîne
aql_string = "FILTER user."
aql_string << conditions.map { |attr, value| "#{attr} == '#{value}'" }.join(" && user.")
où conditions
peut être { :foo => 'bar', :rating => 42 }
, auquel cas le résultat est:
FILTER user.foo == 'bar' && user.rating == '42'
Malheureusement, la requête la langue derrière FILTER ...
n'accepte pas les chaînes si l'attribut (user.rating
ici) est affecté Integer
.
Donc je dois éliminer les guillemets simples autour de #{value}
si value
est un Integer
. J'ai essayé de créer une condition comme if value.class == Fixnum
. Cependant, je ne sais pas comment utiliser cette condition dans conditions.map
parce que join
ne fonctionne que de cette façon.
J'ai essayé de faire quelque chose comme:
aql_string << conditions.map do |attr, value|
if value.class == Fixnum
"#{attr} == #{value}" }.join(" && user.")
else
"#{attr} == '#{value}'" }.join(" && user.")
end
mais cela soulève une erreur: undefined method `join' for "foo == 'bar'":String
.
Avez-vous un conseil pour résoudre mon problème?
Fonctionne parfaitement, merci beaucoup! – Klaus