【问题标题】:Ransack search string arrays stored in dbRansack 搜索存储在 db 中的字符串数组
【发布时间】:2015-09-24 06:42:03
【问题描述】:

我正在尝试使用 ransack 搜索文章。

在我的一个关于如何根据标签获取文章的问题中,我发现了如何做到这一点:

Find articles where array

现在我只想用 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

如何使用标签搜索文章?

谢谢!

【问题讨论】:

    标签: ruby-on-rails arrays search ransack


    【解决方案1】:

    正如this issue 所讨论的,您需要将gem 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多