只是想知道是否有任何功能允许这样做:
MyModel.find_by_conditon(method_a - method_b > 0)
MyModel.class
def method_a next_service_date.to_i end def method_b last_service_date.to_i end
def next_service_date service_date.present? ? calculated_time_estimation : row_time_estimation end def calculated_time_estimation service_date + calculated_service_period end def calculated_service_period case(service_frequency_period) when 'Year' service_frequency_number.to_i.year when 'Month' service_frequency_number.to_i.month when 'Week' service_frequency_number.to_i.day * 7 when 'Day' service_frequency_number.to_i.day end end
service_frequency_number
,service_frequency_period
,service_date
是MyModel的属性
答案 0 :(得分:1)
假设method_a
和method_b
实际上是属性,您可以这样做:
MyModel.where('method_a - method_b > ?', 0)
修改强>
我认为你能够在计算字段上查询的唯一方法是将计算移动到DB,在那里你将有一个标量函数来返回结果。然后你可以做MyModel.where('next_service_date_on_db(service_date) > 0')
。不幸的是,这会将您绑定到特定于数据库的实现,但如果没有服务器端功能,您将无法以这种方式进行查询。
现在,如果您拥有整个集合,则可以根据这些条件进行过滤,但您必须加载整个集合。例如:
MyModel.all.select {|m| m.method_a - m.method_b > 0}
#all
返回所有对象的数组,并根据块的条件选择过滤器。不幸的是,此解决方案会加载所有记录以对应用程序进行排序。
答案 1 :(得分:0)
不完全确定您要实现的目标......但您可能不得不求助于SQL?
(什么是method_a和b?)
MyModel.where('? > 0', (method_a - method_b))