0

この行をハッシュ形式 (:created_at) で書くことは可能ですか?

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

3 に答える 3

2

基本的な ActiveRecord はそれをサポートしていません。ただし、基礎となるクエリ生成ライブラリ (AREL と呼ばれます) はそうします。しかし、単純な AREL は書くのがかなり不便であり、そこでSqueel の出番です。ActiveRecord を拡張し、条件を指定するための拡張された Ruby DSL を提供します。

于 2012-11-03T18:54:53.273 に答える
1

Squeel Gemを見てみましょう

Article.where{created_at >= 2.weeks.ago}ドキュメントに示されているようなコードを記述できるようになります。

これは正確にはハッシュ形式ではありませんが、例よりも本当にエレガントです。

于 2012-11-03T18:53:07.927 に答える
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.1+ と互換性のない meta_where に大きく依存しているため、私は現在 Rails 3.0.20 ゲットーにいます。私はゆっくりとすべての meta_where を arel に置き換えています。

于 2014-04-01T10:07:57.457 に答える