2013-08-12 2 views
1

Я строю школьный календарь, в котором перечислены классы («разделы»), и отображается семестр и даты экзаменов для этих классов. Календарь подается хэш, который определен в Section.rb модели:Проверка хэша на наличие подходящего значения

def get_calendar 

    calendar = {} 
    calendar[:semesters] = Semester.where(section_id: self.id) 
    calendar[:exams] = Exam.where(section_id: self.id) 

    { :calendar => calendar } 

    end 

В Semester и Exam объекты имеют name, start_date и end_date.

Когда цикл через каждый день календаря, как я могу проверить, если есть семестр или экзамен сstart_dateилиend_dateв этот день цикла?

Если есть семестр или экзамен либо с start_date, либо end_date, который соответствует календарной дате, я бы указал имя.

Календарные даты и start_date и end_date все поля используют Date класс (link).

Искренне благодарен за помощь. Я могу уточнить вопрос, если необходимо :)

Спасибо!

+0

Можете ли вы привести пример, иллюстрирующий то, что вы имеете в виду? – Fred

ответ

1

Может быть, вы должны заново продумать свой хэш, и использовать его таким образом:

def get_calendar 
    semesters = self.semesters 
    exams = self.exams 

    events = { } 

    (semesters + exams).each do |event| 
    start_date = event.start_date.to_s 
    events[start_date] ||= [] 
    events[start_date] << event 

    end_date = event.end_date.to_s 
    events[end_date] ||= [] 
    events[end_date] << event 
    end 

    events 
end 

И проверить наличие события в цикле, который строит календарь:

dates_of_calendar.each do |date| 
    if @events[date.to_s].present? 
    # well, there is an event happening for this date! treat it as your wishes! 
    end 
    # etc... 
end 
1

Будет ли работающий метод обнаружения? http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-detect

Так как ваше перекручивание через ваше состояние может быть ...

semesters.detect{|s| s.begin_date > cal_begin_date ... //more conditions here} && 
exams.detect{|e| e.begin_date > cal_begin_date ... //more conditions here} 
+0

Это будет * огромный * расчет для каждой даты диапазона ... – MrYoshiji

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