如何返回rails数组中对象的计数

时间:2016-01-01 11:58:44

标签: ruby-on-rails ruby hash

我有SalesOpportunities,每个都有一个pipeline_status。我希望在视图中显示每个pipeline_status的机会计数,并且为了使其成为最有效的查询,我尝试将方法添加到User类(User has_many SalesOpportunities),其中我提取所有用户的SalesOpportunities并计算它们。我使用以下内容来获取哈希:

self.sales_opportunities.unscope(:order).group(:pipeline_status).count

这将返回一个pipeline_statuses的哈希值,其中包含计算此pipeline_status的商机数 - 如下所示:

{1=>1, 4=>1, 0=>1, 3=>2}

现在我需要将这些信息从哈希中提取到我可以在我的视图中显示的实例变量中 - 我已尝试在我的用户模型上添加方法,但它没有返回信息我需要:

    def status()
    opp_count = self.sales_opportunities.unscope(:order).group(:pipeline_status).count
    opp_count.each do |key, value|
        if key == 0
            prospecting = value
        elsif key == 1
            qualifying = value
        elsif key == 2
            demonstrating = value
        elsif key == 3
            negotiating = value
        elsif key == 4
            closed_won = value
        elsif key == 5
            closed_lost = value
        elsif key == 6
            dormant = value
        end
    end         
end

这会返回上面的哈希值,但我无法提取值(例如,根据哈希输出,限定值应为= 1)。我做错了什么?

1 个答案:

答案 0 :(得分:0)

您没有使用实例变量,您使用的方式 - 它们是局部变量。

这些变量的前缀@使它们成为实例变量,如下所示。

另外,请注意Hash#each方法将哈希对象作为返回值返回 - 只有当它们作用于具有更高范围的变量(例如在块外定义的变量,实例变量)时,块内所采取的操作才会在外部可见或类变量

def status()
    opp_count = self.sales_opportunities.unscope(:order).group(:pipeline_status).count
    opp_count.each do |key, value|
        if key == 0
            @prospecting = value
        elsif key == 1
            @qualifying = value
        elsif key == 2
            @demonstrating = value
        elsif key == 3
            @negotiating = value
        elsif key == 4
            @closed_won = value
        elsif key == 5
            @closed_lost = value
        elsif key == 6
            @dormant = value
        end
    end         
end