0

当用户单击某个按钮时,我正在存储一个非默认变量。模型是 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 %>

但是,数据库中记录的时间不是当前时间,而是页面加载的时间。我已经尝试过上面的代码以及 Time.now。网上关于这个特定问题的文档似乎很少,我无法让它工作。

这是模型发布期间的本地 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 上本地时钟的值。

感谢大家的帮助。

4

2 回答 2

1

您的start_time( Time.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。你的数据库是什么?

于 2013-07-08T00:37:34.983 回答
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
于 2013-07-08T15:12:50.743 回答