简单搜索单个模型中的2列Rails

时间:2014-06-04 18:00:05

标签: ruby-on-rails search

我有简单的搜索(我希望保持这种方式)我可以在哪里搜索产品名称。但我想添加其他列(静态产品模型)intro_text。

到目前为止

代码:

Product.rb

def self.search(search)  
  if search  
   where('intro_text LIKE ? ', "%#{search}%")
  else     
   where('name LIKE ? ', "%#{search}%")    
 end  
end 

搜索控制器

@products_search = Product.search(params[:search]).paginate(:per_page => 5, :page => params[:page])

此时搜索发生时,结果仅显示在 intro_text 字段中。 演示: 正在搜索短语" Pez"应该找到包含此短语的所有产品以及介绍文本的所有产品都包含此短语。

还试图:

 def self.search(search)  
     if search  
        where('intro_text LIKE ? ', "%#{search}%") || where('name LIKE ? ', "%#{search}%")
     else  
     end  
 end

但结果是一样的! 有人可以给我一些提示吗? 我不需要任何搜索宝石。

1 个答案:

答案 0 :(得分:1)

如果params[:search]没有值,则else子句变为:

where('name LIKE "%%"')

这不是很有帮助。

在您发布的第二个示例中,第一个where()将返回ActiveRecord::Relation,并且始终是真实的,因此||永远不会被触发。

此外,使用与本地变量相同的名称作为方法有点令人困惑。

在我看来你想要一个组合的OR搜索?

def self.search(search_term)
  if search_term.present?
    where('intro_text LIKE ? OR name LIKE ?', "%#{search_term}%", "%#{search_term}%")
  else
    none # new in Rails 4, or you can do where('1 = 0')
         # for a scope that will never return records, but can still
         # chain your pagination, etc onto
  end
end