Rails 3有多个参数

时间:2012-07-02 14:59:12

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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?})怎么样?

答案 2 :(得分:1)

我认为这可能与我发现的有关。它似乎在rails控制台中工作,并考虑活动记录alows活动链接:

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