9

Tôi đang làm việc với một ứng dụng cho một trang web du lịch buổi hòa nhạc, mọi lúc (thời gian thông báo, thời gian bắt đầu bán hàng và thời gian bắt đầu sự kiện) là địa phương cho từng thời điểm của địa điểm cụ thể vùng. Tôi đưa người dùng nhập ngày/giờ khi áp dụng và chạy before_filter để đặt múi giờ thích hợp để mọi thứ được lưu trữ trong cơ sở dữ liệu trong UTC. Đối với biểu mẫu 'mới' và để hiển thị thời gian trong chỉ mục và hiển thị các hành động, không có vấn đề gì cả. Khi dữ liệu được đưa ra khỏi cơ sở dữ liệu và vào một chế độ xem, tôi sử dụng in_time_zone để điều chỉnh cho mỗi địa điểm cụ thể.Đường ray - Chọn ngày theo múi giờ được chỉ định

Vấn đề duy nhất là trên biểu mẫu chỉnh sửa. Lựa chọn ngày/giờ hiển thị dữ liệu trong UTC. Khi tôi đang làm việc trên trang web, tôi tinh thần điều chỉnh, nhưng đối với những người khác thì điều đó thật khó hiểu. Tôi muốn làm điều gì đó dọc theo dòng:

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

Hoặc, trong bộ điều khiển:

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

Sau đó, đơn giản, <%= f.datetime_select :start_datetime %>.

Thật không may, tôi đã không tìm được đúng cách để thực hiện việc này. Bạn có ý tưởng nào đáng để bắn?

Cảm ơn bạn rất nhiều.

Trả lời

0

Làm thế nào về một cái gì đó như thế này:

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

Tôi không chắc chắn nếu tôi hiểu những gì bạn muốn làm, nhưng kể từ khi bạn đang lưu trữ các @ event.time_zone, bạn có thể thêm

:default => start_time.in_time_zone(@event.time_zone) 

vào trường biểu mẫu datetime_select của bạn.

0

Tôi chỉ nhận thấy đây là một bài đăng cũ nhưng: Nếu tôi là bạn, tôi sẽ sử dụng thuộc tính ảo để thể hiện ngày giờ của địa điểm. Ví dụ: bạn có thể thêm thuộc tính vào hiệu suất được gọi là adjustment_start_time.

3

Bạn có thể sử dụng phương pháp mặc định của datetime_select, như sau:

%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)) 

Bởi vì giá trị mặc định hiển thị, khách hàng sẽ cho rằng thời gian đã được nhập vào/múi giờ địa phương của mình, nhưng ... giá trị này sẽ thực sự là mặc định múi giờ cho ứng dụng của bạn (như được cung cấp trong application.rb và mặc định là UTC). Vì vậy, bạn sẽ yêu cầu một số mã phía máy chủ để chuyển đổi nó thành giá trị chính xác.

Các vấn đề liên quan