Rails 4格式化部分中的DateTime字段

Rails 4格式化部分中的DateTime字段,datetime,ruby-on-rails-4,timezone,simple-form,Datetime,Ruby On Rails 4,Timezone,Simple Form,我用UTC存储了一个datetime字段,但是用户可以在不同的时区中输入它。我通过JavaScript设置cookie来配置时区。以下是我的ApplicationController代码: before_filter :set_timezone def set_timezone if !cookies["time_zone"].to_s.blank? Time.zone = cookies["time_zone"].to_s end end 我在另一个控制器的窗体上使用嵌套属

我用UTC存储了一个datetime字段,但是用户可以在不同的时区中输入它。我通过JavaScript设置cookie来配置时区。以下是我的ApplicationController代码:

before_filter :set_timezone

def set_timezone
  if !cookies["time_zone"].to_s.blank?
    Time.zone = cookies["time_zone"].to_s
  end
end
我在另一个控制器的窗体上使用嵌套属性存储时间。下面是通过simple_form和simple_fields_for呈现给字段的部分,以“f”的形式传递:

<div class="row fieldset">
  <div class="col-sm-3">
    <%= f.input :day,  collection: days, selected: f.object.day %>
  </div>
  <div class="col-sm-3">
    <%= f.input :open, as: :string %>
  </div>
  <div class="col-sm-3">
    <%= f.input :close, as: :string %>
  </div>
  <div class="col-sm-3">
    <%= f.input :_destroy, as: :hidden %>
    <%= link_to "remove", '#', class: "remove_fields" %>
  </div>
</div>
我相信字段到达视图时是字符串,这就是为什么将输入字段的值设置为以下值不起作用:

<%= f.input :close, as: :string, input_html: { value: f.object.close.to_s(:short) } %>

我只是在测试“短”格式选项。我想我以后可以添加一个自定义的


是否需要为具有嵌套属性的控制器设置控制器中时间的格式?或者我可以在处理存储时间的模型中格式化它们吗?如果您需要更多信息或代码,请告诉我。

我不确定这些是不是最好的选择,但我找到了两个:

1) 使用字段值将实例变量传递给分部。实例变量允许我使用
to_s(:custom_format)
格式化datetime字段

2) 我使用的是简单的形式,发现使用他们的时间格式效果很好。例如:

您可以将任何参数传递到简单表单

第二个选项将meridian选项(AM/PM)添加到小时字段,这对我来说有点奇怪。但这似乎是这两种方法中最简单的一种,所以我现在就这么做了

<%= f.input :close, as: :string, input_html: { value: f.object.close.to_s(:short) } %>