1

type のフィールドをEvent含むモデルがあります。がすでにアクティブかどうか、またはまだ発生していないかどうかを知らせる単純なモデル メソッドがあります。start_datedatetimestart_date

def future_event?
  self.start_date >= DateTime.now
end

次に、自分のビューで、どのビューをロードする必要があるかを確認します (イベントが現在発生しているかどうか、またはイベントがまだ将来発生しているかどうかに基づいて)。両方を Time オブジェクトに変換したり、文字列の書式設定など、さまざまなことを試しました...何も機能していないようで、同じビューが常にレンダリングされます。これが私のビューコードです:

<% if @event.future_event? %>
   <%= render "pages/main_container_offline" %>
   <%= render "pages/sidebar_offline" %>
 <% else %>
   <%= render "pages/main_container_online" %>
   <%= render "pages/sidebar_live" %>
<% end %>

何か案は?

編集:

の出力は次の@event.start_dateとおりです。2012-06-10 10:20:00 UTC

の出力は次のDateTime.nowとおりです。2012-06-10T10:35:30-05:00

ご覧のとおり、フォーマットが異なります。これが問題かどうかはわかりません。


を設定するコントローラーメソッドは次の@eventとおりです。

def index
  @event = Event.active.order("start_date ASC").first
end

## model
scope :active, lambda {
  where("end_date >= ?", DateTime.now)
}
4

2 に答える 2

0

それで、私はついにこれを理解しました。基本的に問題は、Rails がすべてを UTC タイムゾーンで保存することでした。これは、ローカルの時間とは常に異なります (したがって、不適切なレンダリング)。これを修正するには、Rails と ActiveRecord に、タイムゾーンを使用してすべてを保存し、すべてをタイムゾーンで表示するように指示する必要がありました。次の変更により、問題が修正されました。

アプリケーション.rb

config.time_zone = 'Central Time (US & Canada)'
config.active_record.default_timezone = :local

model.rb

def future_event?
  self.start_date >= Time.zone.now
end
于 2012-06-10T16:59:06.933 に答える
0

構成を変更する代わりに、次の方法があります。

def future_event?
  self.start_date.utc >= Time.zone.now.utc
end
于 2012-06-10T15:29:48.303 に答える