Ruby on rails 其中,Like活动记录查询仅在params为单字母字符串时工作
所以我尝试用Rails做一个基本的搜索表单,它应该检索任何标题类似于查询的记录 在我的控制器中,我使用以下代码执行搜索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')
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解决了这个问题。我以后会考虑的!