根据Active Admin Dashboard中的一个Category属性计算数量(Rails 3.2 / active-admin 1.0)

时间:2013-11-23 12:09:52

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 activeadmin

我正在构建一个每日交易应用程序,以学习Ruby on Rails。

我的基本模型是:

  • 优惠

  • 代理商(以此为特色的代理商)。

代理机构的一个属性是" agency_type"我按类型对其进行分类(广告代理,数字代理......)。

交易属于代理机构,代理机构有多笔交易

我想要做的就是在Active Admin上的管理界面上放置一个非常基本的表格,给出了#34;顶级代理机构"根据他们的交易数量。

不幸的是,我在主动管理员的表格中,我没有设法"合并"各种实体。您可以在下面的图片中看到问题:

enter image description here

您可以在第一行看到问题:

  • 它是这样的,因为有一个代理商叫做#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

2 个答案:

答案 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