我正在构建一个列出课程(“部分”)的学校日历,并显示这些课程的学期和考试日期。日历将被提供一个在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 :(得分: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 :(得分: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}