Jak już chcesz się bawić, to nie rób tego w widoku! http://www.youtube.com/watch?v=ku3QkWcPSEw półtorej minuty do obejrzenia. Pomijając MVC, to nie ma najmniejszego sensu umieszczać kodu w erb. Czy tak nie jest czytelniej?:
@cls.each do |client|
allCampLeds = []
allCampLeds << client.leds.count unless client.blank?
end
W ten sposób szybiciej zauwayżysz co robisz źle. Przeanalizuj ten kod.
3) Tak naprawdę interesuje Cię moduł Enumerable: http://ruby-doc.org/core/classes/Enumerable.html
Niestety dalej nie mogę osiągnąć tego. Wszystkie cyfry mam w array[0], a każda cyfra powinna mieć osobny index (arraty[1], array[2] itd.) - wtedy nie byłoby problemu, tak sądzę.
A liczenie tego przez bazę nie daje mi wiarygodnych wyników, bo każdy klient ma różną ilość ekranów.
Oczywiście przeniosę to później do kontrolera, ale na razie robię to w widoku żeby mieć wszystko pod ręką [przechodzę z PHP, a tam można było w kontrolerze testować wszystko ;P].
Jeżeli zrobię tak jak poniżej, to @allCampLeds ma wartość 1.
[code]<% @cls.each do |client| %>
<% @allCampLeds = 0 %>
[code]class Led < ActiveRecord::base
belongs_to :client, :counter_cache => true
end
class Client < ActiveRecord::Base
has_many :leds
end[/code]
Dzięki temu nie musisz liczyc już sumy leds’ów per client, a do tego możesz zsumować łatwo wszystko bez agregacji(grupowania) po klientach. Twój kod wygeneruje tyle zapytań count(*) do bazy ilu masz clientów, poniższy przykład wygeneruje tylko 1 zapytanie pobierające klientów i 1 zapytanie sumujące ilośc leds’ów.
@cls = Client.where('agreement_status_id = ? or agreement_status_id = ?', 2, 6)
@cls_total_leds = @cls.sum(:leds_count)
4. Postaraj się następnym razem opisać lepije model danych i jego relacje w takich przypadkach żeby być dobrze zrozumianym