Ruby on rails 3 如何使ActiveRecord查询忽略nil条件?
为了避免构造复杂的动态SQL查询,我希望能够在条件中传入nil值,并忽略这些值。ActiveRecord支持吗 这里有一个例子Ruby on rails 3 如何使ActiveRecord查询忽略nil条件?,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,为了避免构造复杂的动态SQL查询,我希望能够在条件中传入nil值,并忽略这些值。ActiveRecord支持吗 这里有一个例子 event = Event.find(:all, :conditions => { :title => params[:title], :start_time => pa
event = Event.find(:all, :conditions => {
:title => params[:title],
:start_time => params[:start_time],
:end_time => params[:end_time]
}).first
在这种特殊情况下,如果params[:start_time]设置为nil,ActiveRecord将搜索其start_time设置为null的事件。相反,我希望它忽略开始时间。如何做到这一点?您不必“创建复杂的动态SQL查询”来完成所需的工作。只需单独构造条件散列,并在创建散列时或创建散列后排除空值
conditions = {}
conditions[:title] = params[:title] unless params[:title].blank?
conditions[:start_time] = params[:start_time] unless params[:start_time].blank?
conditions[:end_time] = params[:end_time] unless params[:end_time].blank?
或
或
但最后一种形式只有在键实际上是符号时才有效。在Rails中,params散列是一个hashWithInferenceTaccess,它允许您以符号的形式访问文本键。当然,如果需要,您可以使用键数组中的文本值来包含
然后使用预构建的条件哈希进行查询:
event = Event.find(:all, :conditions => conditions).first
conditions = params.reject {|k,v| !([:title, :start_time, :end_time]).include?(k) }
event = Event.find(:all, :conditions => conditions).first