2013-03-14 53 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