0

只是想知道是否有任何功能可以做到这一点:

MyModel.find_by_conditon(method_a - method_b > 0)

MyModel.class

定义方法_a
  next_service_date.to_i
结尾

定义方法_b
  last_service_date.to_i
结尾
def next_service_date
  service_date.present?? 计算时间估计:row_time_estimation
结尾
def 计算时间估计
  service_date + computed_service_period
结尾
def computed_service_period
      案例(服务频率周期)
      当'年'
        service_frequency_number.to_i.year
      当'月'
        service_frequency_number.to_i.month
      当'周'
        service_frequency_number.to_i.day * 7
      当'日'
        service_frequency_number.to_i.day
      结尾
结尾

service_frequency_number, service_frequency_period,service_date是 MyModel 的属性

4

2 回答 2

1

假设method_aandmethod_b实际上是属性,您可以执行以下操作:

MyModel.where('method_a - method_b > ?', 0)

编辑

我认为您能够查询计算字段的唯一方法是将计算移至数据库,在那里您将有一个标量函数来返回结果。那你就可以了MyModel.where('next_service_date_on_db(service_date) > 0')。不幸的是,这会将您绑定到特定于数据库的实现,但是如果没有服务器端功能,您将无法以这种方式进行查询。

现在,如果您拥有整个集合,则可以根据这些条件进行过滤,但您必须加载整个集合。例如:

MyModel.all.select {|m| m.method_a - m.method_b > 0}

#all返回所有对象的数组,并根据块的条件选择过滤器。不幸的是,该解决方案将所有记录加载到排序应用程序端。

于 2012-12-10T05:23:44.613 回答
0

不完全确定您要达到的目标.. 但您可能不得不求助于 SQL?

(什么是method_a和b?)

MyModel.where('? > 0', (method_a - method_b))
于 2012-12-10T05:20:56.083 回答