Ruby on rails 活动记录从两个没有关联的表中获取结果

Ruby on rails 活动记录从两个没有关联的表中获取结果,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,postgresql-9.1,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,Postgresql 9.1,我有两种型号Trip和Spending,它们没有关联,但都有用户id 行程=>id,区域,用户id,距离 关于支出=>id,区域,用户id,金额 行程中的示例数据: id area user_id distance 1 'CA' 2 10 1 'AK' 3 20 1 'CA' 4 30 1 'AK' 2 10 支出中的示例数据: id area use

我有两种型号
Trip
Spending
,它们没有关联,但都有
用户id

  • 行程=>
    id
    区域
    用户id
    距离

  • 关于
    支出
    =>
    id
    区域
    用户id
    金额

行程中的示例数据

id   area   user_id   distance
1    'CA'     2         10
1    'AK'     3         20
1    'CA'     4         30
1    'AK'     2         10
支出中的示例数据

id   area   user_id   Amount
1    'AK'     2         100
1    'AK'     3         30
1    'CA'     4         60
1    'AK'     2         70
我无法找到获得以下类型输出的方法:

1)
区域中
金额
距离
总和
,例如:

area amount distance
AK    200     30
CA     60     40
2)
区域的
用户的
金额
距离
总和
,例如对于
用户_id=2

area amount distance
AK    170     10
CA     0      10
我可以分别从
Trip
Spending
中获取记录,并用ruby进行操作,但我觉得这并不干净。我曾尝试使用
联接
,但记录重复

我们将非常感谢您对构建
ActiveRecord
查询的任何帮助。谢谢

注:
我简化了模型,排除了这个问题的其他列和关系。因此,我没有为我的项目中的区域创建另一个模型的选项。

您的数据是非规范化的,您可以这样做吗?这样做可能更容易

class Area < ApplicationRecord
  has_many :spending
  has_many :trip 
end

class Spending < ApplicationRecord
  belongs_to :area
end

class Trip < ApplicationRecord
  belongs_to :area
end
类区域
我同意@dps的答案,但我想补充更多。以下是我尝试的代码:

模型定义:

class Area < ApplicationRecord
  has_many :spendings  
  has_many :trips
end

class Trip < ApplicationRecord
end

class Spending < ApplicationRecord
end
按查询分组:

Area.includes(:trips).includes(:spendings).group_by{|a| [a.name,a.trips.sum(:distance),a.spendings.sum(:amount) ] }
如果您想按答案分组,则可以尝试以下方法:

Area.includes(:trips).group(:name).sum(:distance)
Area.includes(:spendings).group(:name).sum(:amount)
更新: 根据需要,您可以将
区域
模型替换为
用户
。在这里,它看起来像:

User.includes(:trips).includes(:spendings).group_by{|a| [a.id,a.trips.group(:area_id).sum(:distance),a.spendings.group(:area_id).sum(:amount) ] }

希望这有帮助

实际上,我已经简化了模型,并排除了这个问题的其他列和关系。这两个模型都属于某个用户,我尝试了一些类似于
user.joins(:trips,:spendings)
的方法,但它返回的值不正确,正如我在前面的评论中所说,我简化了模型,并排除了此问题的其他列和关系。这两个模型都属于一个用户,我尝试了一些类似user.joins(:trips,:spendings)的方法,但返回的结果不正确values@Aitizazk您是否看到此答案中
分组查询?
上的链接.includes?我没有测试它,但在我看来,这就是你要寻找的逻辑类型。p、 这是一个很好的答案@Anand SoniAs我说这是基于我为
区域
创建一个独立模型的想法,这在我的工作中是不可能的situation@Aitizazk,只需将区域替换为用户。我已经更新了我的答案。
User.includes(:trips).includes(:spendings).group_by{|a| [a.id,a.trips.group(:area_id).sum(:distance),a.spendings.group(:area_id).sum(:amount) ] }