我正在努力在用户点击某个按钮时存储非默认变量。模型是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上的本地时钟值。
感谢大家的帮助。
答案 0 :(得分: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。你的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