2017-06-25 8 views
1

私は昨日前日のレコードを返そうとしています。私のレコードには日付と時刻のあるcreated_at列があります。私の条件はちょうど日付を持っているので、常にレコードを返しません。レールで日付を比較アクティブレコードとPG

私は、sqliteを使用しているときにstrftimeを使って時間を削除する作業を行っていましたが、ライブでPGをどうしたらいいですか?

@articles = Article.where("created_at = ?", Date.yesterday-(params[:increment].to_i)).reverse 

(増分は昨日までの日数を=。)

多くのおかげ

答えて

2

いくつかの方法。私は、日付範囲のような好む:

.where("created_at > ? AND created_at < ?", date_from, date_to) 

をあなたはまた、PostgreSQLが内蔵されdate_trunc機能

.where("date_trunc('day', created_at) = ?", date) 

を使用しますが、あなたもあなたの地元のdevのマシン上のpostgresが必要であることを、心に留めておくことができます。

ドキュメント:https://www.postgresql.org/docs/9.1/static/functions-datetime.html

+0

おかげで、date_truncバージョンが初めて働きました。 – Simonp27

1

は今日はこのように

> DateTime.now 
=> Mon, 26 Jun 2017 00:17:12 +0545 

> Account.where('created_at between ? and ?', 2.days.ago.beginning_of_day, 2.days.ago.end_of_day) 
    Account Load (0.5ms) SELECT "accounts".* FROM "accounts" WHERE (created_at between '2017-06-23 00:00:00' and '2017-06-23 23:59:59.999999') LIMIT ? [["LIMIT", 11]] 


=> #<ActiveRecord::Relation [#<Asset id: 3, name: "created 4 days ago", code: nil, type: "Asset", created_at: "2017-06-17 06:57:13", updated_at: "2017-06-21 06:57:13">]> 
  • であると言う、あなたはJun 26 00:00:00Jun 25 00:00:00を開始してから作成した記事を検索します。

についてbeginning_of_dayend_of_day

3

(バージョン5.1以降)のRailsの現在のバージョンでは、あなたがそのようなクエリのためall_day helperを使用することができますを参照してください。

date = (params[:increment].to_i + 1).days.ago 
Article.where(created_at: date.all_day).reverse