Ruby on rails 其中,Like活动记录查询仅在params为单字母字符串时工作

Ruby on rails 其中,Like活动记录查询仅在params为单字母字符串时工作,ruby-on-rails,search,activerecord,Ruby On Rails,Search,Activerecord,所以我尝试用Rails做一个基本的搜索表单,它应该检索任何标题类似于查询的记录 在我的控制器中,我使用以下代码执行搜索 def index if params[:search] @communities = Community.where("title LIKE :query", query: "%#{params[:search][:query]}%") else @communities = Community.all.order('created_at DESC')

所以我尝试用Rails做一个基本的搜索表单,它应该检索任何标题类似于查询的记录

在我的控制器中,我使用以下代码执行搜索

def index
  if params[:search]
    @communities = Community.where("title LIKE :query", query: "%#{params[:search][:query]}%")
  else
    @communities = Community.all.order('created_at DESC')
  end
end
如果
params[:search][:query]
是一个单字符字符串(即搜索获取所有社区,其中:title包含该字符),则一切正常。但是,每当
params[:search][:query]
设置为包含多个字符的字符串时,搜索将获取空的
ActiveRecord::Relation

我错过了什么

根据要求,以下是此问题的一个示例

在控制台中运行以下代码时:

Community.where("title LIKE :query", query: "%#{"oreo"}%")
#=> #<ActiveRecord::Relation []> 
Community.where(“类似标题:query”,query:%#{“oreo”}%”)
#=> # 
但下一个问题是:

Community.where("title LIKE :query", query: "%#{"o"}%")
#=> #<ActiveRecord::Relation [#<Community id: 2, title: "Oreo Community", welcome_message: nil, social: true, owner_id: 1, created_at: "2017-02-20 08:59:19", updated_at: "2017-02-20 08:59:19"]>
Community.where(“类似标题:query”,query:%#{“o”}%”)
#=>#试试这个

 def index
    if params[:search]
      @communities = Community.where("title LIKE ?", "%#{params[:search][:query]}%")
    else
      @communities = Community.all.order('created_at DESC')
    end
  end

问题是,
LIKE
区分大小写,与
oreo
oreo
不匹配

但是,
ILIKE
不区分大小写

因此,您需要使用
i检查
或将值降格

Community.where("title ILIKE :query", query: "%#{'oreo'}%")
# OR
Community.where("lower(title) LIKE :query", query: "%#{'oreo'}%".downcase)

告诉我它是否有效not@Andrew你能添加一个字符串示例和一个你正在尝试搜索的记录示例吗?谢谢Slava,我已经按照你的要求在问题中添加了一个示例。谢谢Aniket,对不起,忘了提及我也尝试了同样的结果。当只有一个字符串时仍在检索结果。此变量%#{params[:search][:query]}%中得到了什么。您确定它是params[:search][:query]还是应该是这个params[:search]……params[:search][:query]正在输出表单字段中输入的字符串(例如“某物”)。我在控制台中尝试了AR查询,直接添加了一个字符串,得到了相同的结果共享控制台结果并显示表Communities Deepak,感谢您的回答,现在通过ILIKE解决了这个问题。我以后会考虑的!