Циклический просмотр массива объектов в Rails: неожиданное поведение - PullRequest
1 голос
/ 30 января 2009

У меня есть простой календарь, отображающий некоторые события, который не совсем дает ожидаемые результаты. Вот код:

<!-- Begin Calendar -->
<%= calendar(:year => @year, :month => @month, :first_day_of_week => 1) do |d|

    output = []
    output << render_calendar_cell(d.mday)

    if d.wday == 1
        @garden.plants.collect do |p| 
            if p.needs_sowing? (d.cweek)
                output << "This week sow: #{p.name}"
            end
        end
    end

    end
%>
<!-- end calendar-->

вот нужен посев? метод, вызываемый в блоке:

def needs_sowing? (week)
      if !sow_out_week_min.blank? && !sow_out_week_max.blank?
        (sow_out_week_min..sow_out_week_max).include? (week)
      end 
end

Это дает мне правильное поведение, когда в цикле проверяется только одно растение, но если их несколько, то выходные данные не будут отображаться, кроме начального

output << render_calendar_cell(d.mday) 

(который просто выводит день месяца).

Может кто-нибудь протянуть руку, чтобы сообщить мне, где я, возможно, иду не так? Или получили несколько советов по лучшему способу обработки такого поведения в цикле?

ТИА

1 Ответ

3 голосов
/ 30 января 2009

Вы должны использовать @garden.plants.each вместо collect. Collect должен использоваться для фильтрации результатов массива, чтобы не зацикливаться на них.

...