【问题标题】:Rails 3 where with multiple paramsRails 3 有多个参数
【发布时间】:2012-07-02 14:59:11
【问题描述】:

我需要构建一个带有 2 个传入参数的动态 sql 队列。定义两个参数时很容易。

MyClass.where(:column1 => param[:first], :column2 => params[:second])

但是当例如param[:first] = 0 我想为该列选择所有(非空)字段时(所以当两个参数都 = 0 时,它将等于select * from tablename)。试过这个语法:

MyClass.where(:column1 => param[:first], :column2 => !nil)

但它给了我错误的输出。有什么建议可以优雅地解决这个问题吗?

【问题讨论】:

    标签: sql ruby-on-rails ruby-on-rails-3 where params


    【解决方案1】:

    您可以在where 中使用?: 运算符:

    MyClass.where(params[:first] ? {:column1 => params[:first]} : "column1 IS NOT NULL")
           .where(params[:second] ? {:column2 => params[:second]} : "column2 IS NOT NULL")
    

    【讨论】:

      【解决方案2】:

      MyClass.where('column1 IS NOT NULL AND column2 IS NOT NULL').where({:column1 => params[:first], :column2 => params[:second]}.delete_if{|k,v| v.nil?}) 呢?

      【讨论】:

        【解决方案3】:

        我认为这可能适用于我的发现。它似乎可以在 rails 控制台中工作,并且考虑到活动记录允许活动链接:

        MyClass.where(:column1 => params[:first], :column2 => params[:second]).where("column1 is NOT NULL").where("column2 is NOT NULL")
        

        【讨论】:

          猜你喜欢
          • 2015-06-12
          • 2011-12-17
          • 2011-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多