2

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

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

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

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

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

4

3 回答 3

2

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

MyClass.where(params[:first] ? {:column1 => params[:first]} : "column1 IS NOT NULL")
       .where(params[:second] ? {:column2 => params[:second]} : "column2 IS NOT NULL")
于 2012-07-02T15:16:44.467 回答
1

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

于 2012-07-02T15:09:08.033 回答
1

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

MyClass.where(:column1 => params[:first], :column2 => params[:second]).where("column1 is NOT NULL").where("column2 is NOT NULL")
于 2012-07-02T15:09:24.200 回答