9

मैं एक कॉन्सर्ट टूर वेबसाइट के लिए एक ऐप के साथ काम कर रहा हूं, जहां हर बार (घोषणा समय, बिक्री शुरू करने के समय, और घटना प्रारंभ समय) प्रत्येक विशेष स्थान के समय के लिए स्थानीय होते हैं क्षेत्र। मैं उस उपयोगकर्ता को दिनांक/समय दर्ज करता हूं जहां लागू हो और उचित समय क्षेत्र निर्धारित करने के लिए पहले_फिल्टर चलाएं ताकि सब कुछ यूटीसी में डेटाबेस में संग्रहीत हो। 'नए' रूप के लिए और सूचकांक में समय प्रदर्शित करने और कार्यों को दिखाने के लिए, कोई समस्या नहीं है। जब डेटा डेटाबेस से वापस लाया जाता है और एक दृश्य में, मैं विशेष स्थान के अनुसार समायोजित करने के लिए in_time_zone का उपयोग करता हूं।रेल - निर्दिष्ट समय क्षेत्र में दिनांक समय का चयन

एकमात्र मुद्दा संपादन फ़ॉर्म पर है। दिनांक/समय चयन यूटीसी में डेटा दिखा रहा है। जब मैं साइट पर काम कर रहा हूं, तो मैं मानसिक रूप से समायोजित करता हूं, लेकिन दूसरों के लिए यह भ्रमित है। या

<%= f.datetime_select :start_datetime.in_time_zone(@event.time_zone) %>

, नियंत्रक में: मैं की तर्ज पर कुछ करने के लिए करना चाहते हैं

def edit 
    @performance = Performance.find(params[:id]) 
    @event = @performance.event 
    @performance.start_datetime = @performance.start_datetime.in_time_zone(@event.time_zone) 
end 

तो बस, <%= f.datetime_select :start_datetime %>

दुर्भाग्य से, मुझे ऐसा करने का सही तरीका नहीं मिला है। क्या आपके पास शॉट देने के लायक कोई विचार है?

बहुत बहुत धन्यवाद।

उत्तर

0

कैसे कुछ इस तरह के बारे में:

# change PST to correct zone abbrev. 
new_zone = ActiveSupport::TimeZone.new("PST") 
@performance.start_datetime = @performance.start_datetime.in_time_zone(new_zone) 
1

मुझे यकीन है कि अगर मैं समझता हूँ कि आप क्या करना चाहते हैं, लेकिन आप @ event.time_zone भंडारण कर रहे हैं के बाद से, आप

:default => start_time.in_time_zone(@event.time_zone) 
जोड़ सकता है नहीं कर रहा हूँ

आपके डेटाटाइम_क्लेक्ट फॉर्म फ़ील्ड में।

0

मैंने अभी देखा है कि यह एक पुरानी पोस्ट है लेकिन: यदि मैं आप थे, तो मैं स्थल के दिनांक समय का प्रतिनिधित्व करने के लिए वर्चुअल विशेषता का उपयोग करूंगा। उदाहरण के लिए, आप adjusted_start_time नामक प्रदर्शन में एक विशेषता जोड़ सकते हैं।

3

आप निम्नलिखित के रूप में, datetime_select के डिफ़ॉल्ट विधि का उपयोग हो सकता है: पता चला डिफ़ॉल्ट मान के कारण

%br 
= f.label :req_sess_start, "Session starts at" 
= f.datetime_select(:req_sess_start, :start_year => 2010, :ampm => true, :default => 0.days.from_now.in_time_zone(@timezone)) 

, ग्राहक समझेंगे कि बार उसकी/उसके स्थानीय समय क्षेत्र में दर्ज किए जाने की है, लेकिन ... यह मान वास्तव में आपके एप्लिकेशन के लिए टाइमज़ोन डिफ़ॉल्ट में होगा (जैसा कि application.rb में दिया गया है, और डिफ़ॉल्ट यूटीसी है)। तो, आपको कुछ सर्वर साइड कोडिंग को सही मान में बदलने के लिए आवश्यकता होगी।