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 %>

ただし、DB に記録されている時刻は現在時刻ではなく、ページが読み込まれた時刻です。上記のコードと 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 に変換されている可能性があります。あなたのDBは何ですか?

于 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 に答える