我正在尝试在我的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以”{“或维度信息开头。
答案 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