2010-01-11 6 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

 Смежные вопросы

  • Нет связанных вопросов^_^