Использование 'CONCAT' w / Arel в Rails 4
у меня есть User
модель first_name
и last_name
атрибуты. Используя Arel, я хотел бы выполнить поиск полного имени, используя CONCAT
. Я читал сообщение в как использовать такие функции, как CONCAT () и т. д. в Ареле? что дает мне указание на то, что это возможно, но я не могу получить синтаксис право. До сих пор у меня
class User < ActiveRecord::Base
def self.search(query)
concat = Arel::Nodes::NamedFunction.new 'concat', [arel_table[:first_name], arel_table[:last_name]]
where ...?
end
end
2 ответов
С последним Арелом требуется использовать Arel::Nodes.build_quoted(' ')
вместо просто String (''). Так что ответ в наши дни:
SEPARATOR = Arel::Nodes.build_quoted(' ')
Arel::Nodes::NamedFunction.new(
'concat',
[arel_table[:first_name], SEPARATOR, arel_table[:last_name]]
)
Если вы хотите равный поиск
where(concat.eq("john smith"))
SELECT "users".* FROM "users" WHERE CONCAT("users"."first_name", "users"."last_name") = 'john smith'
Если вы хотите как поиск
where(concat.matches("%john smith%"))
SELECT "users".* FROM "users" WHERE (CONCAT("users"."first_name", "users"."last_name")) ILIKE '%admin%'
есть другие методы, приведенные в документация что вы можете использовать
возможно, Вам понадобится место в вашем concat
concat = Arel::Nodes::NamedFunction.new(
'concat',
[arel_table[:first_name],
' ',
arel_table[:last_name]]
)