我正在构建一个每日交易应用程序,以学习Ruby on Rails。
我的基本模型是:
优惠
代理商(以此为特色的代理商)。
代理机构的一个属性是" agency_type"我按类型对其进行分类(广告代理,数字代理......)。
交易属于代理机构,代理机构有多笔交易
我想要做的就是在Active Admin上的管理界面上放置一个非常基本的表格,给出了#34;顶级代理机构"根据他们的交易数量。
不幸的是,我在主动管理员的表格中,我没有设法"合并"各种实体。您可以在下面的图片中看到问题:
您可以在第一行看到问题:
它是这样的,因为有一个代理商叫做#34;代理商A"到目前为止还没有任何交易,但它是一个"广告代理商"型
第二行:另一个代理商,"代理商B"到目前为止有2笔交易,也属于"广告代理商"
我喜欢rails和主动管理员要做的就是将它们合并为1条单行"广告代理商"。我怎么能这样做?
这是我的代码:
column do
panel "Top Type of Agencies" do
table_for Agency.order('created_at desc').limit(10) do
column ("Agency Type"), :agency_type
column ("NB of deals") do |agency_type|
agency_type.deals.count
end
end
end
end
答案 0 :(得分:1)
有两种方法可以做到这一点。在纯红宝石中:
# (this is a bad idea)
或利用SQL:
data = Agency.joins('left outer join deals on deals.agency_id = agencies.id').
select('agencies.agency_type, count(deals.id) as deals_count').group 'agency_type'
panel "Top Agency Types" do
table_for data do
column :agency_type
column '# of Deals', :deals_count
end
end
答案 1 :(得分:0)
免责声明:未经测试
要在活动管理员中迭代代理机构类型,您应该拥有与代理机构类型不同的模型。
#agency.rb
has_one :agency_type
def count_deals_by_agency_type(agency_type)
where(:agency_type_id => agency_type).deals.count
end
在主动管理
中column do
panel "Top Type of Agencies" do
table_for AgencyType.all do |agency_type|
column ("Agency Type"), agency_type.name
column ("NB of deals"), Agency.count_deals_by_agency_type(agency_type.id)
end
end
end