【问题标题】:Using the ActiveRecord wrappers for a complicated query使用 ActiveRecord 包装器进行复杂查询
【发布时间】:2011-10-31 19:29:54
【问题描述】:

在我的 Rails 应用程序中,我使用以下 PostgreSQL 查询来查找过去一周评论最多的故事。

 last_week = Date.today() - 7
 most_commented_comments = Comment.find_by_sql("SELECT story_id, COUNT(*) AS total FROM comments WHERE created_at >= (CAST '#{last_week}' AS date) GROUP BY story_id ORDER BY 2 DESC LIMIT #{limit}")

我遇到了一些跨平台兼容性问题,尤其是created_at >=... 子句,我想让这个查询整体上不那么脆弱。但是,我似乎无法找到将这样的复杂查询放入 Rails 提供的 ActiveRecord 包装器的方法。有可能吗?

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord


    【解决方案1】:

    我想我想出了一个更好的方法。

    most_commented_comments = Comment.where("created_at >= ?", Date.today - 7).select("story_id, COUNT(*) as total").group("story_id").order("2 DESC").limit(limit)
    

    【讨论】:

    • 1.我想你想要7.days,7 意味着 7 秒?还是微秒? :) 或者你可以做 1.week 2。2 DESC 是什么意思?
    • 2 desc 表示按第二列降序排列。
    • 7 似乎在没有 .days 的情况下工作,但我可能会添加它,以防将来停止工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    相关资源
    最近更新 更多