0

そのため、イベント カレンダーの週単位のビューを取得し、個々の日に発生するイベントを取得する最善の方法を見つけようとしています。

現在、events_controller のインデックス アクションは、Event.rb のクラス メソッドを使用して、その週に発生するすべてのイベントを取得します。ただし、次のように日ごとのイベントを示すテーブルを作成したいと考えています。

Sunday 04/29/2012
      Class 10:00 am
Monday 04/30/2012
      Class 10:00 am
Tuesday 05/01/2012
      Class 10:00 am
Wednesday 05/02/2012
      Class 10:00 am
Thursday 05/03/2012
      Class 10:00 am
Friday 05/04/2012
      Class 10:00 am
Saturday 05/05/2012
      Class 10:00 am

週に発生するイベントの範囲から、個々の日に発生するイベントを取得する最良の方法はよくわかりません。

#event.rb
class Event < ActiveRecord::Base
  def self.for_week_starting(day=Date.today.beginning_of_week(:sunday))
    sunday = day.beginning_of_week(:sunday)
    saturday = day.end_of_week(:sunday)
    where(:date => sunday..satuday)
  end
end

編集:列挙可能な group_by が進むべき道のようです。毎週の範囲を設定してそれを繰り返し、それを使用@workouts.group_by(&:date)して各ワークアウトのセットを取得できますが、興味のある日付と一致するまでにグループをグループから外す方法がよくわかりません.

4

1 に答える 1

0

言うまでもなくスコープを使用することにはなりませんでしたが、ここに完全な解決策があります。組み込みメソッドが何を返すかを理解するためにコンソールをいろいろと調べましたが、その後のロジックをまとめるのはそれほど難しくありませんでした。

#event.rb
class Event < ActiveRecord::Base 
  def self.for_week_starting(day=Date.today.beginning_of_week(:sunday))
    sunday = day.beginning_of_week(:sunday)
    saturday = day.end_of_week(:sunday)
    where(:date => sunday..saturday)
  end
end

  #events_controller.rb
def index
  #use today's date if none comes through params
  start_date = params[:start_date] ? params[:start_date].to_date : Date.today
  @week = (start_date.beginning_of_week(:sunday)..start_date.end_of_week(:sunday))
  @events = Event.for_week_starting(@week.first).group_by(&:date)
end

#index.html.erb
<% @week.each do |day| %>
  <%= day.strftime('%A, %B %e, %Y')%></th>
  <% unless @events[day].nil? then %>
    <% @events[day].each do |event| %>
      <%= link_to event.name, event_path(event) %>
    <% end %>
    <% end %>
<% end %>
于 2012-05-02T11:36:23.367 に答える