2012-11-03 38 views

回答

1

看看到Squeel Gem

你会能够编写如文档中所示的代码Article.where{created_at >= 2.weeks.ago}

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

+0

我期待黑客/本地(导轨)解决方案,而不是为宝石。你的回答也很有帮助。谢谢。 – Syed

2

基本的ActiveRecord不支持。然而,底层查询生成库(称为AREL)的确如此。然而,简单的AREL写起来相当不方便,这是Squeel进场的地方。它扩展了ActiveRecord并提供了用于指定条件的扩展Ruby DSL。

+0

感谢您的回答,我期待黑客/本地(导轨)解决方案,而不是为宝石(Squeel宝石等)。你的回答也很有帮助。谢谢。 – Syed

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贫民区,因为我严重依赖于与Rails 3.1+不兼容的meta_where。我正在慢慢地将所有meta_where替换为arel。