Разыскать массивы строк поиска, хранящиеся в БД

Я пытаюсь искать статьи с помощью ransack.

В одном из моих вопросов о том, как получить статьи на основе их тегов, я узнал, как это сделать:

Найти статьи, где массив

Теперь я просто хочу выполнить поиск с помощью ransack, но получаю сообщение об ошибке

у меня так

<%= search_form_for @q do |f| %>
        <div class="row">
          <div class="col-md-2">
            <%= f.label :tags_in %> <span data-toggle='tooltip', data-placement='right', title='Una o dos palabras máximo para expecificar lo que está buscando' class="glyphicon glyphicon-question-sign" ></span>
            <%= f.search_field :tags_in, class: 'form-control' %>
          </div>
          <div class="col-md-2">
            <%= f.submit 'Buscar', class: 'btn btn-primary m-t-large' %>
          </div>
        </div>

      <% end %>

ошибка, которую я получаю при выполнении этого поиска xbox, следующая:

PG::InvalidTextRepresentation: ERROR:  array value must start with "{" or dimension information
LINE 1: ...es".* FROM "articles" WHERE "articles"."tags" IN ('xbox')  O...

сканирование ошибок массива

вот контроллер:

def index
    @q = Article.ransack(params[:q])
    @articles = @q.result.paginate(page: params[:page], :per_page => 10).order('created_at DESC')
  end

Как я могу искать статьи по их тегам?

Спасибо!


person Johhan Santana    schedule 06.07.2015    source источник


Ответы (1)


Как обсуждалось в этой проблеме, вам нужно добавить гем postgres_ext в свой проект:

# Gemfile
gem 'postgres_ext'

И добавьте это в инициализатор:

# config/initializers/ransack.rb
Ransack.configure do |config|
  %w[
    contained_within
    contained_within_or_equals
    contains
    contains_or_equals
    overlap
  ].each do |p|
    config.add_predicate p, arel_predicate: p, wants_array: true
  end
end

После этого вы сможете использовать contains в сериализованном массиве.

person Lucas Moulin    schedule 20.04.2016