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'"
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'"
現在受け入れられている回答は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)
スコープを個人的に作成して、読みやすく再利用しやすくしました。
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)
それが役に立てば幸い。
このコードはあなたのために働くはずです:
Comment.find(:all, :conditions => {:created_at => @selected_date.beginning_of_day..@selected_date.end_of_day})
詳細については、時間の計算をご覧ください
注:このコードは非推奨です。Rails 3.1 / 3.2を使用している場合は、回答のコードを使用してください
このコードを実行して、チェックされた回答が機能するかどうかを確認し、日付を入れ替えて正しくする必要がありました。これはうまくいきました--
Day.where(:reference_date => 3.months.ago..Time.now).count
#=> 721
出力が 36 だったはずだと思っている場合は、これを考慮してください、サー、3 日で 3 人は何日ですか?
Comment.find(:all, :conditions =>["date(created_at) BETWEEN ? AND ? ", '2011-11-01','2011-11-15'])
私は 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 []>
そして、はい、常にスコープを使用するのはいいことです!
1日だけ取得したい場合は、次の方法が簡単です。
Comment.all(:conditions => ["date(created_at) = ?", some_date])
以下の 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)
ドキュメントを参照して、試してみてください。