2012-07-02 56 views
2

我需要建立一个动态的SQL队列与2个传入参数。两个参数都定义时很容易。 Rails 3与多个参数

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

但当例如param[:first] = 0我想选择所有(不为空)域此列(所以当两个PARAMS是= 0时将等于select * from tablename)。试过这个语法:

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

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

回答

2

您可以使用?:运营商内部where

MyClass.where(params[:first] ? {:column1 => params[:first]} : "column1 IS NOT NULL") 
     .where(params[:second] ? {:column2 => params[:second]} : "column2 IS NOT NULL") 
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?})怎么样?

0

我认为这可能从我找到的工作。它出现在铁轨控制台工作,并考虑活动记录alows主动链接:

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