gpt4 book ai didi

ruby-on-rails - Rails 2.3.5 在(?)中使用时动态构建条件数组的问题

转载 作者:行者123 更新时间:2023-12-04 06:17:57 25 4
gpt4 key购买 nike

rails 2.3.5

我已经研究了一些与动态构建 ActiveRecord 查找条件有关的其他问题。

我知道那里有一些很棒的东西,比如搜索逻辑,而且这在 Rails3 中更好。但是,我正在使用 geokit 进行地理空间搜索,并且我正在尝试构建一个标准条件集,以允许我组合大量不同的过滤器。

我有 12 个不同的过滤器,我试图将它们动态组合以进行高级搜索。我需要能够混合相等、大于、小于、in (?) 和 IS NULL 条件。

这是我正在努力工作的示例:

conditions = []
conditions << ["sites.site_type in (?)", params[:site_categories]] if params[:site_categories]
conditions << [<< ["sites.operational_status = ?", 'operational'] if params[:oponly] == 1
condition_set = [conditions.map{|c| c[0] }.join(" AND "), *conditions.map{|c| c[1..-1] }.flatten]


@sites = Site.find :all,
:origin => [lat,lng],
:units => distance_unit,
:limit => limit,
:within => range,
:include => [:chargers, :site_reports, :networks],
:conditions => condition_set,
:order => 'distance asc'

当条件表达式只有单个变量时,我似乎能够正常工作,但是当我有一个 (?) 并且有一个值数组时,我收到错误数字的错误的绑定(bind)条件。我加入和展平条件的方式(基于 Combine arrays of conditions in Rails 的回答)似乎无法正确处理数组,而且我对展平逻辑的理解不足以追踪问题。

假设我在 params[:site_categories] 中有 3 个值,上面的代码将给我留下以下内容:

条件是

[["sites.operational_status = ?", "operational"], ["sites.site_type in (?)", ["shopping", "food", "lodging"]]]

扁平化的尝试是:

["sites.operational_status = ? AND sites.site_type in (?)", ["operational"], [["shopping", "food", "lodging"]]]

这给了我:

wrong number of bind variables (4 for 2)

我将退后一步,致力于将所有这些转换为命名范围,但我真的很想了解如何以这种方式实现这一点。

最佳答案

rails 4

users  = User.all
users = User.where(id: params[id]) if params[id].present?
users = User.where(state: states) if states.present?
users.each do |u|
puts u.name
end

旧答案

Monkey 修补 Array 类。在 config/initializers 目录中创建一个名为 monkey_patch.rb 的文件。

class Array
def where(*args)
sql = args.first
unless (sql.is_a?(String) and sql.present?)
return self
end
self[0] = self.first.present? ? " #{self.first} AND #{sql} " : sql
self.concat(args[1..-1])
end
end

现在你可以这样做了:

cond = []
cond.where("id = ?", params[id]) if params[id].present?
cond.where("state IN (?)", states) unless states.empty?
User.all(:conditions => cond)

关于ruby-on-rails - Rails 2.3.5 在(?)中使用时动态构建条件数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7097755/

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