首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建此active_records查询

如何创建此active_records查询
EN

Stack Overflow用户
提问于 2013-02-13 08:10:05
回答 2查看 48关注 0票数 0

我有一个用户模型和一个故事模型。用户有很多故事。

我想创建一个范围,返回今天创建故事最多的用户的25个用户记录,以及他们创建的故事数量。

我知道有些人对active_records查询很在行。我也知道我不是那种人:-(。我们将非常感谢并欣然接受帮助!

#随解决方案更新

我一直在使用@MrYoshiji先生的建议,下面是我想出来的(注意,我在我的active_admin仪表板中使用了这个查询):

代码语言:javascript
复制
    panel "Today's Top Posters" do
      time_range = Date.today.beginning_of_day..Date.today.end_of_day
      table_for User.joins(:stories)
          .select('users.username, count(stories.*) as story_count')
          .group('users.id')
          .where(:stories => {:created_at => time_range})
          .order('story_count DESC')
          .limit(25) do
              column :username
              column "story_count"
      end
  end

低头看,它成功了!

请注意,当我尝试MrYoshiji先生的建议的简化版本时:

代码语言:javascript
复制
User.includes(:stories)
    .select('users.username, count(stories.*) as story_count')
    .order('story_count DESC') #with or without the group statement
    .limit(25)

我得到了以下错误:

代码语言:javascript
复制
    >   User.includes(:stories).select('users.username, count(stories.*) as story_count').order('story_count DESC').limit(25)
  User Load (1.6ms)  SELECT DISTINCT "users".id, story_count AS alias_0 FROM "users" LEFT OUTER JOIN "stories" ON "stories"."user_id" = "users"."id" ORDER BY story_count DESC LIMIT 25
ActiveRecord::StatementInvalid: PG::Error: ERROR:  column "story_count" does not exist
LINE 1: SELECT  DISTINCT "users".id, story_count AS alias_0 FROM "us...

似乎includes不喜欢任何别名。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-24 05:50:20

按照MrYshiji的建议,使用.includes由于别名问题而不起作用(有关这方面的更多信息,请参阅原始问题)。相反,我使用了如下所示的.joins来获得我想要的查询结果(注意,这个查询在我的active_admin仪表板中):

代码语言:javascript
复制
panel "Today's Top Posters" do
  time_range = Date.today.beginning_of_day..Date.today.end_of_day
  table_for User.joins(:stories)
      .select('users.username, count(stories.*) as story_count')
      .group('users.id')
      .where(:stories => {:created_at => time_range})
      .order('story_count DESC')
      .limit(25) do
          column :username
          column "story_count"
  end
end
票数 0
EN

Stack Overflow用户

发布于 2013-02-13 08:19:19

我现在不能测试它,在Windows下运行...你能试试吗?

代码语言:javascript
复制
User.includes(:stories)
     .select('users.*, count(stories.*) as story_count')
     .group('users.id')
     .order('story_count DESC')
     .where('stories.created_at BETWEEN ? AND ?', Date.today.beginning_of_day, Day.today.end_of_day)
     .limit(25)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14844275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档