比较rails Active Record和PG中的日期

时间:2017-06-25 17:50:48

标签: ruby-on-rails ruby

我正在尝试返回前天的记录。我的记录包含日期和时间日期created_at列。虽然我的条件只有日期所以它总是不返回任何记录。

我使用strftime在sqlite上开发工作来消除时间,但是如何在PG上直播呢?

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

(增量=昨天之前的天数。)

非常感谢

3 个答案:

答案 0 :(得分:3)

在当前版本的Rails中(从5.1版开始),您可以使用all_day helper进行类似的查询:

bool TestItemListModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
    // processing of other function arguments, checks, etc.
    (*myData)[row].setName(value.value<std::string>());
    // here I end up with ""
}

QVariant TestItemListModel::data(const QModelIndex &index, int role) const
{
    // again all the checks, etc.
    return QVariant::fromValue<std::string>((*myData)[row].getName());
}

答案 1 :(得分:2)

有几种方法。虽然我更喜欢日期范围:

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

你也可以使用PostgreSQL内置的date_trunc函数

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

但请记住,您在本地开发机器上也需要postgres。

文档:https://www.postgresql.org/docs/9.1/static/functions-datetime.html

答案 2 :(得分: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 25 00:00:00开始到Jun 26 00:00:00创建的文章。

查看beginning_of_dayend_of_day