Rails 3连接多个where条件

时间:2011-12-29 14:31:23

标签: ruby-on-rails-3 activerecord

想要在多个可选的where条件下构建rails活动记录查询。

示例:

我有一个患者搜索表单,可以按ID,姓名和电子邮件地址进行搜索。伪代码如下:

where_sql = ""
where_sql = {'name = ?", params[:name]} if params[:name]
where_sql = {'id = ?", params[:id]} if params[:id]
where_sql = {'email = ?", params[:email]} if params[:email]

Patient.where(where_sql)

如何构建以下查询而不必担心sql注入。

2 个答案:

答案 0 :(得分:1)

如果您使用问号“?”占位符或哈希值ActiveRecord会自动为您转义值。请参阅导轨指南http://guides.rubyonrails.org/security.html#sql-injection

中的注射对策

这可能是ransack gem的一个很好的用例(MetaWhere重写)https://github.com/ernie/ransack

答案 1 :(得分:0)

如果您只使用相同的条件,则可以这样做:

conditions = {}
conditions[:name] = params[:name] if params[:name]
conditions[:id] = params[:id] if params[:id]
conditions[:email] = params[:email] if params[:email]
Patient.where(conditions)

另外,看看一个伟大的searchlogic gem。