2010-01-11 62 views
0

算我有一個嵌套的形式,如:有沒有更好的辦法了三個級別的嵌套形式

class House < ActiveRecord::Base 
    has_many :rooms 
    accepts_nested_attributes_for :rooms 
    attr_accessible :rooms_attributes 
end 

class Room < ActiveRecord::Base 
    has_one :tv 
    accepts_nested_attributes_for :tv 
    attr_accessible :tv_attributes 
end 

class Tv 
    belongs_to :user 
    attr_accessible :manufacturer 
    validates_presence_of :user 
end 

現在,我想知道house.id = 1多間客房和電視如何完全。

在houses_controller我給

@houses = House.all 

而且它放棄簡單的拿到房計數像

<% for house in @houses %> 
<%= house.rooms.count %> 
<% end -%> 

我的問題是如何讓電視算每間房子?我正在使用這個

<%= house.rooms.map {|room| room.tvs.count}.sum %> 

它的工作原理,但我不確定這是否好。 有沒有更好的方法來獲得它?

回答

0

我會在模型中放置一個方法,試圖避免視圖中的代碼。

class House 
    ... 
    def tvs 
    rooms.inject(0) {|r, t| t + r.tvs } 
    end 
end 

class Room 
    ... 
    def tvs 
    tv ? 1 : 0 # it's has_one association right now 
    end 
end 

另外,如果在你的控制你的加載,衆議院所有的對象,之後,你將需要在房間的對象,你應該負載的房屋,如:

House.find :all, :include => { :rooms => :tv } 

這樣你將要做1個查詢,你的方法會有1 + N_rooms + N_tvs查詢

相關問題