停止simple_form将datetime转换为utc

时间:2014-05-27 20:18:02

标签: ruby-on-rails datetime

我有一个使用simple_form渲染到隐藏表单字段的日期时间。该字段名为next_event:erb行如下所示:

  <%= f.input :next_event, as: :hidden, label: false %>

我希望此字符串成为用户本地时区的日期时间。如果我在控制器代码中设置断点,我可以看到该变量位于正确的时区(在本例中为MDT):

:next_event => Wed, 28 May 2014 15:30:00 MDT -06:00,

但是,当它以HTML格式呈现时,日期时间将转换为UTC:

<input class="hidden" id="foo_next_event" name="foo[next_event]" type="hidden" value="2014-05-28 21:30:00">

如何让simple_form停止转换为utc?

1 个答案:

答案 0 :(得分:3)

您可以手动指定值,以便TimeZone转换不会发生:

<%= f.input :next_event, as: :hidden, label: false, input_html: { value: f.object.next_event.to_s } %>

另一种选择......可能是对您的属性使用*_before_type_cast方法。所以在模型中定义:

def next_event_before_type_cast
  self[:next_event].to_s
end

使用这种方法,你应该得到你想要的结果,而不必担心在这里(或其他地方)格式化日期。