【问题标题】:select posts from one day从一天中选择帖子
【发布时间】:2016-11-03 14:22:51
【问题描述】:

我想从某一天选择帖子。正确的方法是什么?这个错误:

date = '3/11/2016'.to_date

User.joins(:posts).where(posts: {'created_at >= ? AND created_at <= ?', date.beginning_of_day, date.end_of_day})

【问题讨论】:

  • 这会出现什么错误?
  • 意外},一般语法
  • User.joins(:posts).where('posts.created_at &gt;= ? AND posts.created_at &lt;= ?', date.beginning_of_day, date.end_of_day)

标签: sql ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:
Posts.where('created_at >= ? and created_at <= ?', Date.today.at_beginning_of_month, Date.today)

没有必要加入用户,除非你也想要用户然后你可以这样做

User.joins(:posts).all.where('posts.created_at >= ? and posts.created_at <= ?', Date.today.at_beginning_of_month, Date.today).preload(:posts)

preload 将有助于提高效率

【讨论】:

  • preload 有点像include
  • 对于效率的思考也是 +1。
【解决方案2】:

如果你只是想按天选择,你可以试试这样。

User.joins(:posts).where(posts: { 'extract(day from created_at) = ?', desired_day_of_month } )

【讨论】:

  • 也许是这样的,然后'2016-11-03'.to_date.day
【解决方案3】:

你的语法有问题:

posts: {'created_at >= ? AND created_at <= ?', date.beginning_of_day, date.end_of_day}

应该使用哈希语法发送列进行查询,例如:

posts: { title: 'some title' }, etc

在你的情况下,你应该这样做:

User.joins(:posts).where('posts.created_at >= ? AND posts.created_at <= ?', date.beginning_of_day, date.end_of_day)

【讨论】:

    猜你喜欢
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多