複数人の予定の1週間表示について考える
とりあえず動作することを目標にする。Redmineを参考にしている。
コントローラー
def week if params[:year] and params[:year].to_i > 1900 @year = params[:year].to_i if params[:month] and params[:month].to_i > 0 and params[:month].to_i < 13 @month = params[:month].to_i end @cweek = params[:cweek].to_i unless params[:cweek] end @year ||= Date.today.year @month ||= Date.today.month @cweek ||= Date.today.cweek @startdt = Date.commercial(@year, @cweek, 1) #年、週、月曜日 @startdt = @startdt -(@startdt.cwday - 1)%7 @enddt = Date.commercial(@year, @cweek, 7) #年、週、月曜日 events = Response.find(:all, :conditions =>["started >= ? AND responded <= ?", @startdt, @enddt], :include=>:request, :order=>'requests.requested DESC') @staffs = events.group_by{|event| event.staff_name } @day = [] 7.times{|i| @day << @startdt+i.day } end
「@month」は表示にしか使わないので微妙な感じがする
ビュー
<%- @staffs.each do |event| %> <%= event[0] %> <%- @day.each do |day| %> <%= day %> <%- event[1].each do |res| %> <%- if res.started.to_s(:date)==day.to_s%> <%= res.content %><br> <%- end %> <%- end %><%# res %> <%- end %><%# day %> <br> <%- end %><%# event %>
三重ループってダサいと思うけど、クエリーを数回発生させるのも宜しくないのでコレでいいや。