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 }