rails 4:数组条件查找子字符串,安全/首选方式?

时间:2013-12-06 15:54:08

标签: ruby-on-rails

我想通过字段name的子字符串搜索数据库。我发现this topic带来了这个解决方案(有效):

@users = User.where("name like ?", "%#{params[:name]}%")

official guide我发现他们建议使用

@users = User.where("name like ?", params[:name])

但这会对结果产生影响。推荐的代码会精确搜索params[:name],第一个代码也会查找包含params[:name]的字符串。

现在我有点困惑

  • 为什么会有差异,在我看来结果应该是相同的,
  • 我该怎么用?

谢谢!

3 个答案:

答案 0 :(得分:2)

这是SQL语法,%string%(第一种情况)将搜索子字符串。使用哪个取决于你想要达到的目标。

答案 1 :(得分:0)

使用params对象可以为进一步的工作而不是纯粹的字符串提供安全的html 你可以看到差异只是调试它 例如(在带有参数的位置代码中)

raise params.inspect

答案 2 :(得分:0)

添加@ DeeY的答案。

% s指向子串的方向。因此foo%会转换为

search for a match for the string 'foo' and 'foobar' but not 'bazfoo'

%foo%只是意味着从foo两个方向看。

PostgreSQL也有ilike这是一个不区分大小写的搜索,这是大多数情况下所需要的。你没有提到数据库,但我想我会把它扔出去。