gpt4 book ai didi

ruby-on-rails-3 - 如何让 ActiveRecord 查询忽略 nil 条件?

转载 作者:行者123 更新时间:2023-12-04 07:20:41 25 4
gpt4 key购买 nike

为了避免必须构建复杂的动态 SQL 查询,我希望能够在我的条件中只传递 nil 值,并忽略这些值。 ActiveRecord 支持吗?

这是一个例子。

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 的事件。相反,我希望它忽略 start_time。我该怎么做?

最佳答案

您不必“创建复杂的动态 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?

conditions = {:title => params[:title], :start_time => params[:start_time], :end_time => params[:end_time]}
conditions.delete_if {|k,v| v.blank? }

conditions = params.reject {|k,v| !([:title, :start_time, :end_time]).include?(k) }

但最后一种形式只有在键实际上是符号时才有效。在 Rails 中,params 哈希是一个 HashWithIndifferentAccess,它允许您将文本键作为符号访问。当然,如有必要,您可以只使用要包含的键数组中的文本值。

然后使用您预先构建的条件哈希进行查询:

event = Event.find(:all, :conditions => conditions).first

关于ruby-on-rails-3 - 如何让 ActiveRecord 查询忽略 nil 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10232220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com