2013-03-14 54 views
0

我有以下型号:与滑轨的has_many关系访问模型数据

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 

    attr_accessible :name, :email, :password, :password_confirmation, :remember_me 

    has_many :rulesets 
end 

class Ruleset < ActiveRecord::Base 
    attr_accessible :title, :game_id, :user_id 

    validates :game_id, presence: true 
    validates :user_id, presence: true 
    validates :title, presence: true 

    belongs_to :user 
    belongs_to :game 
    has_many :rules 
end 

class Rule < ActiveRecord::Base 
    attr_accessible :description, :ruleset_id 
    belongs_to :ruleset 

    validates :description, presence: true 
    validates :ruleset_id, presence: true 
end 

我有一个名为PagesController控制器,其控制该用户的仪表板,其中,我想显示的规则的规则集的数量和数量用户拥有。这是我的控制器

class PagesController < ApplicationController 

    def home 
    end 

    def dashboard 
    @rulesets = current_user.rulesets 
    end 
end 

在我的仪表板视图,我试图显示规则集和规则算作这样的:

<% if current_user.rulesets.any? %> 
    <li><%= @rulesets.count %> Ruleset</li> 
    <li><%= @rulesets.rules.count%> Rules</li> 
<% end %> 

这将返回规则集,如果我只是尝试和计数的权数规则集。当我尝试计算规则时,我得到了这个和“未定义的方法规则”错误。我应该如何访问用户规则集中的规则?

回答

2

您需要计算每个规则集的所有规则集和规则。使用类似的东西:

@rulesets.collect {|r| r.rules.count}.sum 
+0

啊,这个工作。谢谢! – 2013-03-14 15:27:19

+0

我这种情况下,每个规则集都存储在| r |中目的? – 2013-03-14 15:32:18

+0

不,规则集存储在@rulesets变量中。给定规则集的所有规则都会在r遍历规则集数组时存储在r中。 – johnkoht 2013-03-15 03:43:51

0

规则将与特定的规则集相关联。您应该通过id指定规则集,然后使用“.rules.count”来计算与THAT规则集关联的所有规则。

+0

我想我不完全确定如何做到这一点,因为我很新。我有我的规则集集合存储在控制器的@rulesets变量中。我如何检查每个规则集,然后提取规则? – 2013-03-14 03:39:49