如何只显示一次相同类型的多个记录?

时间:2013-08-17 12:12:45

标签: ruby-on-rails-3

我有一个rails 3.1.12应用程序,其中假设我有一个表 A ,并且我有一些数据,并且它与表 B 与has_many相关联关系,我的意思是说

class A < ActiveRecord::Base
 has_many :B, :conditions => {:type => "B"}, :dependent => :destroy
 has_many :c, :class_name => "B", :conditions => {:type => nil}, :dependent => :destroy
end

在B的模型中我有:

class B < ActiveRecord::Base
  belongs_to :A
end

我的表格中有一些数据 C ,它继承自 B

 - **name** **amount**
 -    c1      10
 -    c2      20
 -    c3       5
 -    c1      4
 -    c2      15

我希望只显示一次这样的重复项:

  • 名称 * 金额 *
    • c1 14
    • c2 35
    • c3 5

但是我不知道怎么做到这一点,我尝试了**group_by**uniq方法,但它们不适用于我的情况。在我的控制器中 A 关于查看操作我已声明所有这些:

class AsController < ApplicationController
def show
    @a = A.find(params[:id])
    @bs = @a.bs
    @cs = @a.cs
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @a }
    end
  end

end

并在我的视图文件中,我调用了所有这些:

<%= render :partial => "b_item_details", :collection => @bs %>

 <%= render :partial => "c_line_item_details", :collection => @cs %>

我相信有些人可能会遇到这样的问题,任何帮助都会感激不尽

实际上我想显示唯一记录我的意思是如果c1有4个条目而c2有3个条目而不是显示我想只显示c1和c2一次,它们的总数应该是所有条目的总和(c1 + c1 + c3 + c4)

1 个答案:

答案 0 :(得分:2)

尝试:

@cs = @a.cs.group(:name).sum(:amount)

这应该返回一个名称,金额对的散列,例如:

{ 'c1' => 14, 'c2' => 35, 'c3' => 5 }

请参阅http://guides.rubyonrails.org/active_record_querying.html#sum

相关问题