我有以下sql:
select * from slide_results where tags @> ARRAY['pro']::varchar[]
我将其转换为ActiveRecord范围:
scope :by_tags, ->(tags) { where('tags @> ?', "{ARRAY[pro]::varchar[]}") }
但不幸的是它没有返回相同的结果? 我做错了什么?
答案 0 :(得分:0)
你有ARRAY[...]
并且在错误的地方施放,你有一些流浪的支撑;此外,不应该进行打字。你应该说:
where('tags @> array[?]', 'pro')
否则,ActiveRecord会将{ARRAY[pro]::varchar[]}
视为一个单独的字符串,该字符串应该被转义并包含在单个引号中,产生:
tags @> '{ARRAY[pro]::varchar[]}'
它不能做你想要的'{ARRAY[pro]::varchar[]}'
只是一个SQL字符串文字。
如果数组的内容始终只是'pro'
,那么您可以直接进入:
where("tags @> array['pro']")
因为占位符不是必需的。