Rails 3多个关键字过滤查询

时间:2013-07-31 18:19:04

标签: ruby-on-rails-3 algorithm search

我正在编写一个过滤算法,将用户输入作为关键字数组,如

@keywords = ['news', 'TV show', 'games', 'IT']

并查询表格,例如我的数据库中的视频表格。表中有一个字符串字段,其中包含一些用逗号分隔的标记。对于视频实例,如果其标签字段包含一个(或多个)关键字,则应返回该关键字。我开始时喜欢

@videos = []
@keywords.each |word| do
  @videos.push(Video.where('tags LIKE ?', '%#{word}%'))
end
@videos = @videos.flatten

然后我发现,首先,它会包含重复的视频,其次,它会查询数据库的次数与关键字的长度一样多,而根本没有效率。

有任何改善这方面的建议吗?

1 个答案:

答案 0 :(得分:0)

如果你需要like子句,那就可以这样做:

@videos = Video.where( (@keywords.map { |kw| "tags like \'%#{kw}%\'" }).join(" or ") )

可能不是最流行的Ruby,而是直截了当。