Rails查询唯一项

时间:2018-03-14 08:28:06

标签: ruby-on-rails

我有一个可以正常工作的搜索栏,但每次显示正确的结果时都会产生重复。

if params[:nav_search] 
  @art = Art.where(["style_number LIKE ? OR name LIKE ?", "%#{params[:nav_search]}%", "%#{params[:nav_search]}%"]).page(params[:page]).per_page(18)
end

我出错的任何线索?

3 个答案:

答案 0 :(得分:1)

尝试以下

@art = Art.where(["style_number LIKE ? OR name LIKE ?", "%#{params[:nav_search]}%", "%#{params[:nav_search]}%"]).distinct.page(params[:page]).per_page(18)

要从数据库中检索对象,Active Record提供了几种查找程序方法。每个finder方法都允许您将参数传递给它,以便在不编写原始SQL的情况下对数据库执行某些查询。

你可以很好地理解这个Rails Guide

答案 1 :(得分:0)

包括 .uniq

试试这个,

if params[:nav_search] 
  @art = Art.where(["style_number LIKE ? OR name LIKE ?", "%#{params[:nav_search]}%", "%#{params[:nav_search]}%"]).uniq.page(params[:page]).per_page(18)
end

答案 2 :(得分:0)

使用uniqdistinct来避免重复记录。在您的情况下,您应该使用distinct

if params[:nav_search] 
  @art = Art.where(["style_number LIKE ? OR name LIKE ?", "%#{params[:nav_search]}%", "%#{params[:nav_search]}%"]).distinct.page(params[:page]).per_page(18)
end