【问题标题】:Rails find by conditionRails 按条件查找
【发布时间】:2012-12-10 05:16:50
【问题描述】:

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

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_numberservice_frequency_periodservice_date 是 MyModel 的属性

【问题讨论】:

  • 您能更好地了解您要解决的问题吗?问题和定义有点模糊。 last_service_date 是否等同于 service_date ?还有 row_time_estimate 是如何定义的?

标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.2


【解决方案1】:

假设method_amethod_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 返回一个包含所有对象的数组,并根据块的条件选择过滤器。不幸的是,此解决方案将所有记录加载到排序应用程序端。

【讨论】:

  • 不幸的是method_a和method_b不是属性,只是更新了一个问题
  • next_service_date 是属性吗?
  • @SeanHill 啊,我有一段时间没有刷新我的页面了。我删除了我的答案,因为你说的是​​同样的话。谢谢!
【解决方案2】:

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

(什么是method_a和b?)

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

【讨论】:

  • 这将如何工作? method_amethod_bMyModel 上的实例方法。
  • 我的印象是 method_a 和 method_b 返回某种整数,当组合时..将用于与“大于 0”进行比较。
猜你喜欢
  • 2011-02-15
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 2013-05-18
  • 2019-11-11
相关资源
最近更新 更多