如何使用Rails 3获取两个关联的数据库值

时间:2015-04-18 12:15:41

标签: ruby ruby-on-rails-3.2

嗨我在DB中有两个表。第一个表格如下。

  

表名 -

t_hcsy_details

  

模型中的类名 -

class THcsyDetails < ActiveRecord::Base

end

表格中的值如下所示。

HCSY_Details_ID  HCSY_ID  HCSY_Fund_Type_ID   Amount
1                 2        1                   1125
2                 2        2                    390
3                 2        3                     285
4                 2        4                   100
5                 2        5                      60
6                 2        6                      40

我的第二张表如下。

  

表名:

t_hcsy_fund_type_master

  模型中的

类:

class THcsyFundTypeMaster < ActiveRecord::Base

end

表值如下。

 HCSY_Fund_Type_ID   Fund_Type_Code  Fund_Type_Name   Amount

        1                   1               woods         1125

        2                   2               Burning       390

        3                   3               goods         285

        4                   4               brahmin       100

        5                   5               swd           60

        6                   6               Photo          40

我只知道第一个表的HCSY_ID值(即-2)。但我需要第二个表中的Fund_Type_Name和Amount。你可以看到一个HCSY_ID有6个不同的记录。但是我需要所有的Fund_Type_Name和一个HCSY_ID的金额。请帮我解决这个问题,为上面显示的两个类创建对象。请帮助我。

1 个答案:

答案 0 :(得分:2)

您尚未指定任何关系设置,因此在两个查询中将其拆分会更容易:

# you already have hcsy_id
fund_type_ids = THcsyDetails.where(hcsy_id: hcsy_id).pluck(:hcsy_fund_type_id)
fund_types = THcsyFundTypeMaster.where(id: fund_type_ids)
fund_types.group(:fund_type_name).sum(:amount)

如果您设置了正确的关系,上面的内容将简化为:

THcsyDetails.
joins(association_name). # THcsyFundTypeMaster
where(hcsy_id: hcsy_id).
group("#{t = THcsyFundTypeMaster.table_name}.fund_type_name").
sum("#{t}.amount")