Ransacker: неподдерживаемый тип аргумента: строка. Создайте узел Arel вместо

#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
  

Это решило проблему.