Rails类似于分页条件



我想根据用户输入筛选我的paginate返回值。但是用户输入并不总是精确的。因此,我必须使用like,而不是使用=比较。我的第一次尝试是

Person.paginate :page => params[:page], :conditions => ["name like '%?%'", entered_name]

但是得到的查询是CCD_ 4。这是一个无效的查询。

下面的查询返回了我试图实现的目标,但它打开了SQL注入的漏洞。

Person.paginate :page => params[:page], :conditions => ["name like '%#{entered_name}%'"]

其结果查询为where name like '%my_user_input%'

问题是:如何在不产生此安全问题的情况下使用类似条件?

我用的是3.0.20的铁轨。

ActiveRecord支持Arel::Table上处理转义的matches方法。

在您的情况下,您可以使用

Person.where(Person.arel_table[:name].matches("%#{params[:entered_name]}%")).
  paginate(page: params[:page])

并将安全处理留给ActiveRecord。

相关内容

  • 没有找到相关文章

最新更新