我想通过字段name
的子字符串搜索数据库。我发现this topic带来了这个解决方案(有效):
@users = User.where("name like ?", "%#{params[:name]}%")
在official guide我发现他们建议使用
@users = User.where("name like ?", params[:name])
但这会对结果产生影响。推荐的代码会精确搜索params[:name]
,第一个代码也会查找包含params[:name]
的字符串。
现在我有点困惑
谢谢!
答案 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
这是一个不区分大小写的搜索,这是大多数情况下所需要的。你没有提到数据库,但我想我会把它扔出去。