是否可以以散列格式(:created_at)
编写此行User.where("created_at > ?", Time.now - 1.month)
User.where("created_at >= ?", DateTime.parse('2012-10-31')
答案 0 :(得分:2)
基本的ActiveRecord不支持。但是底层查询生成库(称为AREL)可以。然而,普通的AREL编写起来相当不方便,这是Squeel发挥作用的地方。它扩展了ActiveRecord,并提供了扩展的Ruby DSL来指定条件。
答案 1 :(得分:1)
答案 2 :(得分:0)
我试图摆脱meta_where / squeel,因为它不再受支持了。我目前唯一可行的解决方案,就是深入研究AREL:
User.where(User.arel_table[:created_at].gt(1.month.ago))
User.where(User.arel_table[:created_at].gteq(DateTime.parse('2012-10-31'))
您可以将所有查询/范围放在与模型不同的类中,并封装大量详细信息,请查看此处:
你可以从中获得很多好处。所有的合并范围都可以很好地工作,因为arel会为你处理别名。
就个人而言,我现在在Rails 3.0.20 ghetto中,因为我严重依赖与Rails 3.1+不兼容的meta_where。我正在慢慢地将所有meta_where替换为arel。