Ransacker: неподдерживаемый тип аргумента: String.Вместо этого постройте узел Арель - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь связаться с двумя полями, а затем искать с помощью Ransack. У меня есть модель User и два поля: 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

но я получаю эту ошибку: Неподдерживаемый тип аргумента: String. Вместо этого создайте узел Arel. после передачи полного имени в поле поиска.

1 Ответ

0 голосов
/ 14 марта 2019

Я просто заменяю свой код следующим:

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

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

...