我目前有一个基本的搜索,可以让我输入一个单词,它会返回所有类似搜索的记录。据如下:多关键字搜索
application.html.erb
<%= form_tag games_path, :method => 'get' do %>
<%= hidden_field_tag :direction, params[:direction] %>
<%= hidden_field_tag :sort, params[:sort] %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag t('.searchb'), :game_name => nil %>
<% end %>
控制器和模型
@games = Game.search(params[:search])
def self.search(search)
search = search.to_s.strip.split
search.inject(scoped) do |combined_scope, search|
combined_scope.where(['game_name LIKE ? OR genre LIKE ? OR console LIKE ?', "%#{search}%", "%#{search}%", "%#{search}%"])
end
end
我现在想,虽然做的是在搜索栏输入多个单词的能力并让它将所有相关记录归还给那些单词,而不是包含所有相关记录。
例如如果我输入格斗,动作
我想让它返回所有格斗游戏和所有动作游戏。
我该如何去实施这个? 型号:
编辑
我希望有一个不使用宝石的选项:/我觉得编写代码更好,因为它可以让我更好地理解rails吗?我已经用我的模型部分更新了上述内容(附在控制器行下)如果我键入的单词很好,但如果我键入两个单词,它会尝试查找包含两个单词的记录,而不是全部记录。 – user1222136 2012-03-05 21:25:24
因为你可以使用MySQL函数http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html来实现你自己的全文搜索,但那不是ruby的方式。如果你知道宝石的用途,使用宝石并不坏。狮身人面像是一个filltext搜索deamon,思维狮身人面像是一个使用这个守护进程的界面。你可以阅读更多关于他们两个。我没有看到写作自己的搜索机制有任何意义! – davidb 2012-03-06 12:26:11