在postgres列中搜索参数值

时间:2017-02-21 04:46:08

标签: ruby-on-rails postgresql search

我正在尝试在我的Rails 5网站上实现高级搜索。用户传入参数“provider_type”,我想返回包含该值的所有记录。使用简单形式从下拉列表中选择该值。我的new.html.erb看起来像这样:

<%= simple_form_for Search.new, :html => {:class => 'form-horizontal' } do |f| %>
    <%= f.input :provider_type, collection: ['Mental Health', 'Medical'] %>
    <%= f.button :submit %>
<% end %>

我的搜索模型如下所示:

class Search < ApplicationRecord
    def search_providers
        providers = Provider.all
        providers = providers.where("provider_type LIKE ?", ['Mental Health', 'Medical']) if provider_type.present?
        providers
    end
end

我的搜索控制器:

def SearchesController < ApplicationController
    def new
        @types = Provider.uniq.pluck(:provider_type)
    end

    private
        def search_params
            params.require(:search).permit(:provider_type)
        end
    end
end

当我尝试在搜索表单中搜索“心理健康”时,我收到此错误:PG :: UndefinedFunction:ERROR:运算符不存在:字符变化[] ~~未知

修改

当我将其改为

providers.where(provider_type: provider_type) if provider_type.present?

这会产生错误“PG :: InvalidTextRepresentation:ERROR:malformed array literal:”%Mental Health%“DETAIL:数组值mut以”{“或维度信息开头。

1 个答案:

答案 0 :(得分:0)

可能你不需要LIKE运算符而是IN。 IN(或ANY)检查字段是否与数组元素之一匹配:

 providers.where(provider_type: provider_type) if provider_type.present?

Rails 3 / Ruby: ActiveRecord Find method IN condition Array to Parameters single quote issue