Ruby on rails 是否有更好的方法计算三层嵌套表单

Ruby on rails 是否有更好的方法计算三层嵌套表单,ruby-on-rails,nested,nested-forms,Ruby On Rails,Nested,Nested Forms,我有一个嵌套表单,如: 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

我有一个嵌套表单,如:

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
每栋房子的房间数很简单,就像

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

我的问题是如何让电视计数?我现在用这个

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

这是可行的,但我不确定这是好是坏。
有没有更好的方法来获取它?

我在模型中放了一个方法,试图避免视图中的代码

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_房间+N_电视查询

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