是否可以用哈希/符号替换字符串(:created_at)

时间:2012-11-03 18:42:14

标签: ruby-on-rails-3 activerecord

是否可以以散列格式(:created_at)

编写此行
User.where("created_at > ?", Time.now - 1.month) 
User.where("created_at >= ?", DateTime.parse('2012-10-31')

3 个答案:

答案 0 :(得分:2)

基本的ActiveRecord不支持。但是底层查询生成库(称为AREL)可以。然而,普通的AREL编写起来相当不方便,这是Squeel发挥作用的地方。它扩展了ActiveRecord,并提供了扩展的Ruby DSL来指定条件。

答案 1 :(得分:1)

查看Squeel Gem

您将能够编写Article.where{created_at >= 2.weeks.ago}之类的代码,如文档中所示。

它不完全是一种哈希格式,但它比你的例子更优雅。

答案 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。