0

使用 Rails 和 MySQL。不确定是否有人问过这个问题,但找不到。

我有以下记录:

1. I love Rails
2. I love Django
3. I code using Ruby on Rails

====

(1) 搜索:“我爱”

结果:“我爱Rails”、“我爱Django”

====

(2) 搜索:“爱”

结果:“我Rails”、“我Django”

====

(3) 搜索:“病”

结果:“我喜欢 Rails”、“我使用 Ruby on Rails 编写代码”

====

(4) 搜索:“代码 Ruby”

结果:“我使用 Ruby on Rails 进行编码”

====

我的代码是:

term = "%#{params[:term]}%"
shops = Shop.where("name LIKE ?", term)

它仅适用于搜索 (1) 和 (2)。在进行搜索 (3) 和 (4) 时,我如何编码以实现结果?

非常感谢。

4

2 回答 2

2

我认为您需要在其中使用通配符(在原始 SQL 中)

LIKE '%ails'

或更一般地说:

LIKE '%substring%'
于 2013-02-18T17:33:12.723 回答
0

找到了解决方案。

我需要将搜索短语中的每个单词都用%string%.

====

搜索 (1): "我爱"

询问:SELECT * from t WHERE name LIKE "%i% %love%";

结果:“我爱 Rails”、“我爱 Django”

====

搜索 (2): "爱"

询问:SELECT * from t WHERE name LIKE "%love%";

结果:“我爱 Rails”、“我爱 Django”

====

搜索 (3):“病”

询问:SELECT * from t WHERE name LIKE "%ails%";

结果:“我喜欢 Rails”、“我使用 Ruby on Rails 编写代码”

====

搜索 (4):“代码 Ruby”

询问:SELECT * from t WHERE name LIKE "%code% %Ruby%";

结果:“我使用 Ruby on Rails 进行编码”

====

我的 Ruby 代码应该是:

term = "#{params[:term]}"
f_term = term.gsub /\b/, '%'
shops = Shop.where("name LIKE ?", f_term)

您可以在http://sqlfiddle.com/#!2/d63f5/4进行测试

于 2013-02-19T03:49:31.500 回答