複数人の予定の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 %>

三重ループってダサいと思うけど、クエリーを数回発生させるのも宜しくないのでコレでいいや。