#ruby-on-rails #ransack
#ruby-on-rails #выполнить поиск
Вопрос:
Я пытаюсь связаться с двумя полями, а затем выполнить поиск с помощью ransack. У меня есть модель пользователя и два поля: first_name и last_name, и я хочу выполнять поиск пользователей по полному имени. Вот что я использую :
ransacker :full_name do |parent|
Arel::Nodes::InfixOperation.new('||',
Arel::Nodes::InfixOperation.new('||',
parent.table[:first_name], ' '
),
parent.table[:last_name]
)
end
но я получаю эту ошибку: Неподдерживаемый тип аргумента: строка. Вместо этого создайте узел Arel. после ввода полного имени в поле поиска.
Ответ №1:
Я просто заменяю свой код следующим:
ransacker :full_name, formatter: proc { |v| v.mb_chars.downcase.to_s } do |parent|
Arel::Nodes::NamedFunction.new('LOWER',
[Arel::Nodes::NamedFunction.new('concat_ws',
[Arel::Nodes.build_quoted(' '), parent.table[:first_name],
parent.table[:last_name]])])
end
Это решило проблему.