Rails Time.now不检索当前时间

时间:2013-07-08 00:22:27

标签: ruby ruby-on-rails-3 date datetime

我正在努力在用户点击某个按钮时存储非默认变量。模型是Team,变量是start_time。

我目前正在使用下面的表单在AJAX表单中设置时间。

<%= form_for @team, remote: true do |f| %>
    <%= f.hidden_field :start_time, :value => Time.now.in_time_zone("Eastern Time (US & Canada)") %>
    <div class="actions">
        <%= f.submit 'Begin Exercise Set Up', :class => "btn btn-primary" %>
    </div>
<% end %>

但是,在DB中记录的时间不是当前时间,而是页面加载的时间。我已经尝试过上面的代码以及Time.now。似乎很少有关于这个特定问题的在线文档,我无法使其发挥作用。

以下是Model Post期间的本地Web服务器日志。

   (0.2ms)  BEGIN
   (0.6ms)  UPDATE "teams" SET "start_time" = '2013-07-08 00:17:44.000000', "updated_at" = '2013-07-08 00:17:50.843328' WHERE "teams"."id" = 59
   (141.4ms)  COMMIT

您可以看到start_time值不等于updated_at设置的实际时间。

此外,这些值都不等于我的Macbook pro上的本地时钟值。

感谢大家的帮助。

2 个答案:

答案 0 :(得分:1)

您的start_timeTime.now.in_time.zone)会在页面加载/渲染中填充。保存模型时会重新填充updated_at。你的时间只有几秒钟,这表明这个人花了几秒钟提交表格。

根据更新的要求,当点击一个开始按钮提交表单时,听起来你想在控制器动作中填充时间。

def update
  # your code
  team.start_time = Time.now.in_time_zone('EST')

  # rest of your code saving and processing the return
end

至于为什么时间不同,它不应该是,除非你在不同的时区。但是,我确实注意到SQL生成中没有时区。数据库可能不是时区感知的,并且正在转换为UTC。你的DB是什么?

答案 1 :(得分:0)

1。您可以在页面加载时生成的视图中设置静态时间。

2。保存对象时在控制器中设置时间。基本示例:

@object = Object.new(params[:object].merge(:start_time => Time.now))
if @object.save
  redirect_to 'best side in da world'
else
  render :new
end