2016-07-09 3 views
2

У меня есть поле json column, и я должен искать все значения телефона внутри этого столбца, я искал его, и я не нашел никакого документа с помощью ransack. Можно ли использовать ransaack для поиска столбца json? Я использовал Ransack искать другие поля, так что я должен использовать Ransack или что-то, что может объединить оба результатаrails ransack gem для поиска json column

моя колонка JSON выглядит следующим образом

{"phone1"=>"", "relationship_type1"=>"", "relationship_name1"=>"", "phone2"=>"", "relationship_type2"=>"", "relationship_name2"=>"", "phone3"=>"", "relationship_type3"=>"", "relationship_name3"=>"", "phone4"=>"", "relationship_type4"=>"", "relationship_name4"=>""} 

PHONE1, phone2,3,4 должен быть возможен поиск.

ответ

1

См Ransack wiki

Для каждого столбца JSON добавить один из них к вашей модели, и это позволит вашей колонки в формате JSON, чтобы быть разграблены как обычные колонки:

ransacker :phone1 do |parent| Arel::Nodes::InfixOperation.new('->', parent.table[:json_column], 'phone1') end

0

выше ответ исправить, за исключением того, что Arel 6+ вызовет исключение, если вы отправите только строку для последнего arg, вы должны использовать Arel::Nodes::build_quoted('phone1') вместо 'phone1 в этом примере

Кроме того, я обнаружил, что если вы собираетесь использовать ransacker на модели, вы должны называть ее Model.search вместо Model.ransack, может быть какое-то исключение, но использование Model.search - это то, что сработало для меня.

#search принимает хэш грабителя вы собираетесь использовать с добавлением предиката вы работаете (например, phone1_cont или phone1_eq)

Таким образом, чтобы сделать вышеуказанную работу, которую вы должны были бы назвать Model.search({phone1_cont: "555"})

Смежные вопросы