195

1 日で作成されたコメントを照会する必要があります。このフィールドは、標準のタイムスタンプの一部ですcreated_at。選択した日付は からのものdate_selectです。

どうすればActiveRecordそれを行うことができますか?

次のようなものが必要です:

"SELECT * FROM comments WHERE created_at BETWEEN '2010-02-03 00:00:00' AND '2010-02-03 23:59:59'"
4

11 に答える 11

453

現在受け入れられている回答はRails 3では廃止されていることに注意してください。代わりにこれを行う必要があります。

Comment.where(:created_at => @selected_date.beginning_of_day..@selected_date.end_of_day)

または、純粋な文字列条件を使用したい、または使用する必要がある場合は、次のことができます。

Comment.where('created_at BETWEEN ? AND ?', @selected_date.beginning_of_day, @selected_date.end_of_day)
于 2012-10-18T02:10:25.430 に答える
52

スコープを個人的に作成して、読みやすく再利用しやすくしました。

Comment.rb では、スコープを定義できます。

scope :created_between, lambda {|start_date, end_date| where("created_at >= ? AND created_at <= ?", start_date, end_date )}

次に、次の間に作成されたクエリを実行します。

@comment.created_between(1.year.ago, Time.now)

それが役に立てば幸い。

于 2012-07-30T15:42:32.113 に答える
25

このコードはあなたのために働くはずです:

Comment.find(:all, :conditions => {:created_at => @selected_date.beginning_of_day..@selected_date.end_of_day})

詳細については、時間の計算をご覧ください

注:このコードは非推奨です。Rails 3.1 / 3.2を使用している場合は、回答のコードを使用してください

于 2010-03-04T18:41:09.727 に答える
11

このコードを実行して、チェックされた回答が機能するかどうかを確認し、日付を入れ替えて正しくする必要がありました。これはうまくいきました--

Day.where(:reference_date => 3.months.ago..Time.now).count
#=> 721

出力が 36 だったはずだと思っている場合は、これを考慮してください、サー、3 日で 3 人は何日ですか?

于 2012-11-05T01:45:12.047 に答える
7
Comment.find(:all, :conditions =>["date(created_at) BETWEEN ? AND ? ", '2011-11-01','2011-11-15'])
于 2011-11-24T06:00:31.967 に答える
5

私は 2 の代わりに 3 つのドットを使用しています。3 つのドットは、最初が開いていて最後が閉じている範囲を提供するため、後続の範囲に対して 2 つのクエリを実行すると、同じ行を戻すことはできません。両方。

2.2.2 :003 > Comment.where(updated_at: 2.days.ago.beginning_of_day..1.day.ago.beginning_of_day)
Comment Load (0.3ms)  SELECT "comments".* FROM "comments" WHERE ("comments"."updated_at" BETWEEN '2015-07-12 00:00:00.000000' AND '2015-07-13 00:00:00.000000')
=> #<ActiveRecord::Relation []> 
2.2.2 :004 > Comment.where(updated_at: 2.days.ago.beginning_of_day...1.day.ago.beginning_of_day)
Comment Load (0.3ms)  SELECT "comments".* FROM "comments" WHERE ("comments"."updated_at" >= '2015-07-12 00:00:00.000000' AND "comments"."updated_at" < '2015-07-13 00:00:00.000000')
=> #<ActiveRecord::Relation []> 

そして、はい、常にスコープを使用するのはいいことです!

于 2015-07-14T20:20:05.393 に答える
4

1日だけ取得したい場合は、次の方法が簡単です。

Comment.all(:conditions => ["date(created_at) = ?", some_date])
于 2010-03-04T18:54:37.320 に答える
1

以下の gem を使用して、日付間のレコードを見つけることができます。

この gem は非常に使いやすく、より明確ですBy starは、この gem と API をより明確に使用しており、ドキュメントもよく説明されています。

Post.between_times(Time.zone.now - 3.hours,  # all posts in last 3 hours
                  Time.zone.now)

ここでは、私たちのフィールドも通過できますPost.by_month("January", field: :updated_at)

ドキュメントを参照して、試してみてください。

于 2015-02-05T12:57:18.553 に答える