Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby和MySQL数据库查询组限制_Mysql_Ruby - Fatal编程技术网

Ruby和MySQL数据库查询组限制

Ruby和MySQL数据库查询组限制,mysql,ruby,Mysql,Ruby,我试图返回一个给定用户(当前用户)在一周内(过去7天)创建的活动,并按天分组,列出每个活动花费的时间总和 当前用户有许多项目 当前用户通过项目进行了许多活动 对于过去7天中的每一天,我想总结在项目为内部(project.internal为布尔值)的活动上花费的时间(每个活动都有时间字段来存储花费的时间) 换句话说,这就是我需要的。今天是星期三 今天: 内部项目的总活动时间 非内部项目的总活动时间 昨天 2.几天前。。。在过去的7天里,诸如此类 模型、控制器和视图中有什么 理想情况下,它需要使

我试图返回一个给定用户(当前用户)在一周内(过去7天)创建的活动,并按天分组,列出每个活动花费的时间总和

当前用户有许多项目 当前用户通过项目进行了许多活动

对于过去7天中的每一天,我想总结在项目为内部(project.internal为布尔值)的活动上花费的时间(每个活动都有时间字段来存储花费的时间)

换句话说,这就是我需要的。今天是星期三

今天:

  • 内部项目的总活动时间
  • 非内部项目的总活动时间
昨天

2.几天前。。。在过去的7天里,诸如此类

模型、控制器和视图中有什么


理想情况下,它需要使用MySQL和SQLite。提前感谢。

这样的方法最好在模型中定义,并在视图中使用。控制器实际上只是用于设置视图,以便视图可以执行其工作

在模型中定义这些测试的优点是,您可以为它们编写单元测试,这通常比功能测试或集成测试更容易设置。您的方法也很容易从
控制台
命令行测试

对于很多事情,你可以简单地在你的关系上使用
sum
方法。它可能看起来像这样:

user.activities.sum(:time_spent)
SELECT users.id, projects.internal, SUM(activities.time) AS total_time, activities.on_date
  FROM users
  LEFT JOIN projects ON projects.user_id=users.id
  LEFT JOIN activities ON activities.project_id=projects.id
  GROUP BY users.id, projects.internal, activities.on_date
您可以将作用域应用于
活动
关系,以更好地定位结果

更新

要按不同的参数组合在一起,您始终可以将其表示为SQL联接并提取计算值。查询将如下所示:

user.activities.sum(:time_spent)
SELECT users.id, projects.internal, SUM(activities.time) AS total_time, activities.on_date
  FROM users
  LEFT JOIN projects ON projects.user_id=users.id
  LEFT JOIN activities ON activities.project_id=projects.id
  GROUP BY users.id, projects.internal, activities.on_date
一旦设置正确,并根据需要调整列名,就可以将其包装在调用中,这样可以轻松提取值:

class User < ActiveRecord::Base
  def self.time_spent_on_projects(user_id = nil)
    query = "..." # Query from above

    # Allow scoping to a particular user by adding a WHERE clause
    query = self.sanitize_sql([ "#{query} WHERE users.id=?", user_id ])

    self.connection.select_all(query)
  end

  def time_spent_on_projects
    self.class.time_spent_on_projects(self.id)
  end
end
class用户

这会将所有值返回为
String
nil
,因此您可能需要根据需要转换为数字。

谢谢。在我的例子中,我成功地获得了当前的用户.activities.sum(:time),但困难在于我需要查看projects表并返回一个值数组(每天一个值)。您只需按天分组,尽管助手方法不支持这一点,您可以始终使用
User.connection。选择\u all
从查询中提取该信息。参考资料将有助于解释。我在示例中添加了一些说明。