2012-11-03 36 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。