ruby-on-rails - Rails-在指定时区中选择日期时间

标签 ruby-on-rails ruby-on-rails-3 actionview actionviewhelper

我正在使用一个音乐会巡回网站的应用程序,该网站的所有时间(公告时间,销售开始时间和事件开始时间)均位于每个特定 field 的时区。我在适当的地方输入用户输入的日期/时间,然后运行before_filter设置适当的时区,以便所有内容都以UTC格式存储在数据库中。对于"new"表单,以及在索引和显示操作中显示时间,一点都没有问题。当数据从数据库中带出并进入 View 时,我使用in_time_zone根据特定场所进行调整。

唯一的问题是在编辑表单上。选择的日期/时间以UTC显示数据。当我在网站上工作时,我会进行心理调整,但对于其他人则感到困惑。我想按照以下方式做一些事情:
<%= f.datetime_select :start_datetime.in_time_zone(@event.time_zone) %>
或者,在 Controller 中:

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

不幸的是,我还没有找到正确的方法来做到这一点。您有什么值得一试的想法吗?

非常感谢你。

最佳答案

您可以使用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中提供的,默认值为UTC)。
因此,您将需要一些服务器端编码才能将其转换为正确的值。

关于ruby-on-rails - Rails-在指定时区中选择日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6246987/

相关文章:

ruby-on-rails - Rails:ActionView::Template::Error(production.log 中不允许操作错误

ruby-on-rails - rails 5.1 : url helper for files in public folder

ruby-on-rails - rails 4.2 : Unknown Attribute or Server Error in Log

ruby-on-rails - time_select 空白字段保存表单提交时的默认时间

ruby-on-rails - 摆脱rails中的scaffold.css

ruby-on-rails-3 - 如果 :to field has a comma,则 ActionMailer 无法正确发送电子邮件

ruby-on-rails - 更新任何属性后回形针图像名称更改

ruby-on-rails - 在 Rails 4 中禁用 has_secure_password password_confirmation 检查

ruby-on-rails - 请告诉我这个 HAML :sass filter syntax 有什么问题

ruby-on-rails - Rails 可选参数