2017-09-19 2 views
0

je l'instruction SQL suivante:sql à la portée ActiveRecord

select * from slide_results where tags @> ARRAY['pro']::varchar[] 

Je me suis converti à la portée ActiveRecord:

scope :by_tags, ->(tags) { where('tags @> ?', "{ARRAY[pro]::varchar[]}") } 

, mais malheureusement, il ne retourne pas les mêmes résultats? Qu'est-ce que je fais de mal?

Répondre

0

Vous avez vos ARRAY[...] et vous les placez au mauvais endroit et vous avez des accolades parasites; De plus, le cast de type ne devrait pas être nécessaire. Vous devriez dire:

where('tags @> array[?]', 'pro') 

Sinon, ActiveRecord verra {ARRAY[pro]::varchar[]} comme une seule chaîne qui doit être échappé et enveloppé en simple quotes rendement:

tags @> '{ARRAY[pro]::varchar[]}' 

qui ne fait pas ce que vous voulez que '{ARRAY[pro]::varchar[]}' est juste un littéral de chaîne SQL.

Si est toujours juste 'pro' le contenu du tableau, alors vous pouvez aller directement à:

where("tags @> array['pro']") 

que l'espace réservé est pas vraiment nécessaire.