0

私の望む最終結果は、events#index ページのイベントを 3 つの期間 (今日、明日、今週) でグループ化することです。理想的には、訪問者のタイムゾーンでソートする必要がありますが、それが重要な場合の主な使用例は EST です。

これはかなり単純な Rails アプリで、 https ://github.com/moizk/events で確認できます。

私はRailsにかなり慣れていないので、この種のことはコントローラーによって処理され、次の代わりに3つのインスタンス変数を作成すると仮定します。

@events = Event.all

次のようになります。

@todaysevents = Events.where(some logic in here)
@tomorrowsevents = Events.where(some logic in here)

私はそのロジックがどうあるべきか理解できません。

4

1 に答える 1

1

モデルに 3 つのスコープを追加し、event_start_at使用している時間フィールドに置き換えることをお勧めします。

class Event < ActiveRecord::Base
  scope :today, lambda { where(event_start_at: Time.zone.now.all_day }
  scope :tomorrow, lambda { where(event_start_at: 1.day.from_now.all_day }
  scope :this_week, lambda { where(event_start_at: Time.zone.now.all_week }   
end

そしてコントローラーでそれらを使用します:

@events_today = Event.today
@events_tomorrow = Event.tomorrow
@events_this_week = Event.this_week

Sandi Metz の "アクションごとに 1 つのインスタンス変数" というルールに従う場合は、これが非常に気に入っています。これらのイベントをオブジェクトでラップすることをお勧めします。

@events = {
  today: Event.today,
  tomorrow: Event.tomorrow,
  this_week: Event.this_week
}

そして、のようなビューでそれらを使用し@events[:today]ます@events[:tomorrow], @events[:this_week]

ハッシュを OpenStruct でラップして , , を許可することもできますが@events.today@events.tomorrowこれ@events.this_weekはおそらく自転車脱走の領域です。

于 2013-03-29T19:31:37.213 に答える