【问题标题】:Rails 3 joining multiple where conditionRails 3加入多个where条件
【发布时间】:2011-12-29 14:31:23
【问题描述】:

希望构建具有多个可选 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 注入。

【问题讨论】:

标签: ruby-on-rails-3 activerecord


【解决方案1】:

如果您使用问号“?”占位符或散列 ActiveRecord 会自动为您转义值。请参阅 rails guides 中的注入对策http://guides.rubyonrails.org/security.html#sql-injection

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

【讨论】:

    【解决方案2】:

    如果你只使用相等的条件,你可以这样做:

    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。

    【讨论】:

    • 感谢您的回复。但是,我不只是在同等条件下使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 2022-01-19
    • 2015-06-16
    相关资源
    最近更新 更多