0

イベント一覧サイトを構築しています。現在、各イベントは特定の日付で入力され、順番に表示されます....簡単です!ただ、フェスや演劇など複数の日程にまたがるイベントの場合はどう対応するかを考える必要があります。日付ごとに何度もイベントに参加することは、明らかに最善の選択肢ではありません。開始日と終了日を設定できると思っていましたが、開始日と終了日の間の日付のインデックスにイベントを表示する方法がわかりません。これはおそらく非常に単純ですが、これで間違った道を歩む可能性がある前に、経験豊富な人のためにいくつかのガイダンスを求めたいと思いました.

現時点でのイベント スキーマ:

create_table "events", :force => true do |t|
    t.date     "event_date"
    t.string   "headline"
    t.text     "info"
    t.integer  "event_type_id"
    t.integer  "venue_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "event_image_file_name"
    t.string   "event_image_content_type"
    t.integer  "event_image_file_size"
    t.datetime "event_image_updated_at"
    t.boolean  "free"
  end

そして、私の Event Controller インデックスは次のことを行います。

 @events = Event.paginate(:page => params[:page], :per_page => 12).find(:all, :conditions => ['event_date >= ?', Date.today], :order => "event_date")

編集: イベント コントローラー インデックス メソッドの次の行によって生成された日付ヘッダーを使用してイベントをリストしていることを指摘する必要がありました。

@events_dates = @events.group_by { |e| e.event_date }

ビューは次のようなものです。

<% @events_dates.sort.each do |event_dates, events| %>
<div class="well">
<h3>
<% if event_dates == Date.today %>
Today
<% elsif event_dates == Date.today + 1 %>
Tomorrow
<% else %>
<%= event_dates.to_date.to_formatted_s(:my_format) %>
<% end %>
</h3>
</div>

<%= render events %>
<% end %>

イベントのパーシャルには、イベントの見出し、情報などが含まれます。

したがって、日付ヘッダーをループする方法を変更する必要があると思います。データベースからイベントの日付をグループ化してループする代わりに、ほとんどの場合、暦日をループして、event_start_date と event_end_date に基づいてそれらの日付にイベントが発生するかどうかを確認する必要があります。それにアプローチする方法はありますか?

4

2 に答える 2

1

条件ハッシュを使用して、開始日と終了日がある場合:

:conditions => ["event_start_date <= ? AND event_end_date >= ?", Date.today, Date.today]

またはアレル:

.where("event_start_date <= ? AND event_end_date >= ?", Date.today, Date.today)

編集:

さて、日付範囲を反復処理して、その日のイベントを表示します。日付範囲を反復するには、Ruby の Date.upto() 関数を使用します。日付ごとに、イベントを反復処理し、現在の日付に関連するイベントのみを表示できます。

次のコードは、コントローラーで @start_date と @end_date を設定したことを前提としています。

<% @start_date.upto(@end_date) do |date| %>
<div class="well">
<h3>
<% if date == Date.today %>
Today
<% elsif date == Date.today + 1 %>
Tomorrow
<% else %>
<%= date.to_formatted_s(:my_format) %>
<% end %>
</h3>
</div>

<%= render @events.select{|event| event.start_date < date && event.end_date > date} %>
<% end %>

ただし、ここのビューではロジックが多すぎます。これを機能させるには少し再調整する必要があるかもしれませんが、正しい道をたどることができます。

于 2012-06-09T08:38:55.177 に答える
0

グループ化する必要はないと思います。

@events = Event.where('start_date >= ? AND end_date >= ?', Date.today.beginning_of_day], Date.today.beginning_of_day]).order(:start_date)

あなたの見解では、次のようなことをしてください:

  Today
  <% for event in @events %>
    <% if event.start_date == Date.today %>
      <%= render "events/event" %>
    <% end %>
  <% end 
  Tomorrow
  <% for event in @events %>
    <% if event.start_date == Date.tomorrow %>
      <%= render "events/event" %>
    <% end %>
  <% end %>

それはあなたが達成しようとしていることですか?

おそらく a を使用して、少しクリーンアップする必要がありfor event in @events.where date is todayますが、アイデアはわかります

于 2012-06-09T12:21:22.930 に答える