在Rails中对单个列执行搜索

时间:2014-07-21 15:20:43

标签: ruby-on-rails ruby search

这可能是一个非常基本的新问题。我需要cretea方法在单个列的模型中进行搜索。该模型称为视频。我想搜索标题栏。我认为这个方法应该是这样的:

class Video < ActiveRecord::Base

  def self.sear_for_video_by_title(search_phrase)
    #do the search here
  end
end

我只是不确定做这样的事情的正确语法是什么。我想我需要使用like关键字。也许是这样的:

video = Video.were(:title).like(search_phrase)

我确信离开了,但那是我要去的基本逻辑。

2 个答案:

答案 0 :(得分:1)

假设使用ActiveRecord 3.2.x的Ruby on Rails 3,你可以这样做:

video = Video.where("title like ?", "%#{params[:search_phrase]}%")

将返回您想要的结果。但是这里有一些你需要考虑的事情。

  1. 通配符字符串搜索在数据库方面非常昂贵。您需要考虑存储关键字等元数据,并通过这些关键字进行搜索。
  2. 您需要阅读SQL注入,并了解为什么它是一件大事,以及如何通过上述方法等技术来避免它。
  3. 有关详细信息,请参阅http://guides.rubyonrails.org/security.html

答案 1 :(得分:1)

您可以执行以下操作:

Video.where('title LIKE ?', "%#{search_phrase}%")

制作一个范围:

class Video < ActiveRecord::Base
  scope :with_title_like, ->(phrase) { where('title LIKE ?', "%#{phrase}%") }

用法:

@videos = Video.with_title_like('Jurassic')

你可以改进这种研究方法:

  • 拆分phrase的每个空格并搜索每个字词
  • make不区分大小写,
  • 扩展其他领域的研究(如description field)