【发布时间】:2013-01-30 20:12:46
【问题描述】:
我正在努力寻找对动态方法进行元编程的最佳方式,我将根据条件限制结果......例如:
class Timeslip < ActiveRecord::Base
def self.by_car_trans(car, trans)
joins(:car)
.where("cars.trans IN (?) and cars.year IN (?) and cars.model ILIKE ?", trans, 1993..2002, car)
.order('et1320')
end
end
假设我没有传入我的参数,而是传入一个条件数组,其中键是字段名,值是字段值。例如,我会做这样的事情:
我会传入 [["field", "value", "operator"],["field", "value", "operator"]]]
def self.using_conditions(conditions)
joins(:car)
conditions.each do |key, value|
where("cars.#{key} #{operator} ?", value)
end
end
但是,这不起作用,而且不是很灵活...我希望能够检测该值是否为数组,并使用IN()而不是=,也许可以使用ILIKE对于不区分大小写的条件...
感谢任何建议。我在这里的主要目标是拥有一个“列表”模型,用户可以在其中动态构建他们的条件,然后保存该列表以供将来使用。此列表将根据关联的汽车表过滤时间单模型...也许有更简单的方法来解决这个问题?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 postgresql rails-activerecord