परिवर्तित नहीं करता है मुझे टाइमज़ोन और पोस्टग्रेस्क्ल डीबी (रेल 3.0.4, पोस्टग्रेएसक्यूएल 9.0) के साथ समस्या है। मैं एक कस्टम स्कोप का उपयोग कर रहा हूं, जिसमें मैं कुछ शर्तों को जोड़ता हूं, शामिल हूं आदि।रेल टाइमज़ोन (पोस्टग्रेएसक्यूएल)
समस्या यह है कि रेल समय को मेरे स्थानीय टाइमज़ोन में परिवर्तित नहीं करते हैं।
where("activities.starting_at >= ? AND activities.starting_at < ?", start, stop)
और चुनें बयान में, मैं starting_at TRUNC हैं:
scope :with_activities_within_range_in_week, lambda{ |latMin, lngMin, latMax, lngMax, date|
select("date_trunc('day', activities.starting_at) as date,
count(activities.id) as value
") \
.within(latMin, lngMin, latMax, lngMax) \
.joins(:activities) \
.merge(Activity.in_week(date)) \
.group("date") \
.order("date")
}
श्रेणियों के लिए विधि चेकों के भीतर, Activity.in_week गुंजाइश इस रिटर्न: यहाँ दायरे से कोड है दिन के लिए क्षेत्र।
2011-04-07 18:48:32
2011-04-02 14:07:20
2011-04-02 14:06:49
दुर्भाग्य से यह समय क्षेत्र शामिल नहीं है:
मैं दिनांक फ़ील्ड के लिए निम्न उत्पादन हो रही है। जब मैं "सामान्य" रेल कार्यों के माध्यम से अपने मॉडल तक पहुंचने का प्रयास करता हूं, तो यह काम करता है:
puts Activity.first.starting_at
-> 2011-04-15 06:47:55 +0200
मैं क्या गलत कर रहा हूं? उम्मीद है कि कोई मदद कर सकता है!
THX, टक्स
डेटाबेस के अंदर 'activities.starting_at' किस प्रकार का है? और क्या होता है यदि आप 'psql' के भीतर से 'गतिविधियों से start_at का चयन करें'? –
'activities.starting_at' एक टाइमज़ोन के बिना 'टाइमस्टैम्प' है (यूटीसी में संग्रहीत)। 'गतिविधियों' रिटर्न से start_at का चयन करें '2011-04-15 04: 47: 34', बिना टाइमज़ोन के। लेकिन क्या रेलों को फ्लाई पर विशिष्ट टाइमज़ोन में समय नहीं बदलना चाहिए? मेरे प्रश्न से मेरे उदाहरण के साथ 'Activity.first.starting_at -> 2011-04-15 06:47:55 + 0200' यह काम करता है। – 23tux
मुझे एक और दिलचस्प बात मिली: जब मैं परिणामों पर पुन: प्रयास करता हूं, और अपने दिनांक क्षेत्र की कक्षा को डंप करता हूं, तो मुझे 'स्ट्रिंग' मिलता है। लेकिन यह 'ActiveSupport :: TimeWithZone' होना चाहिए। मैंने postgresql के प्रलेखन को पढ़ा है, और 'date_trunc ('day', activities.starting_at) 'को' टाइमस्टैंप 'वापस करना चाहिए। रेल इसे क्यों परिवर्तित नहीं करते हैं? – 23tux