ger*_*rky 8 search activerecord sql-injection ruby-on-rails ruby-on-rails-3
我正在实现一个简单的搜索功能,它应检查username,last_name和first_name中的字符串.我在旧的RailsCast上看过这个ActiveRecord方法:
http://railscasts.com/episodes/37-simple-search-form
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
Run Code Online (Sandbox Code Playgroud)
但是我如何设置它以便在name,last_name和first name中搜索关键字并返回记录,如果其中一个字段与该术语匹配?
我也想知道RailsCast上的代码是否容易进行SQL注入?
非常感谢!
Ere*_*bih 22
我假设您的模型名称是Model - 只需在执行实际查询时将其替换为您的真实模型名称:
Model.where("name LIKE ? OR last_name LIKE ? OR first_name LIKE ?", "%#{search}%","%#{search}%","%#{search}%")
Run Code Online (Sandbox Code Playgroud)
关于你对SQL注入的担忧 - 两个代码片段都不受SQL注入的影响.只要你没有直接将字符串嵌入到WHERE子句中就可以了.易于注入的代码的示例是:
Model.where("name LIKE '#{params[:name]}'")
Run Code Online (Sandbox Code Playgroud)
rau*_*era 12
虽然选择的答案会起作用,但我注意到如果你试图输入一个搜索"Raul Riera"就会中断,因为它会在两种情况下都失败,因为Raul Riera不是我的名字或我的姓.是我的第一个和姓氏......我这样解决了
Model.where("lower(first_name || ' ' || last_name) LIKE ?", "%#{search.downcase}%")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11932 次 |
| 最近记录: |