2012-03-27 9 views
0

私はstart_timeend_timeの2つのフィールドにdatetime形式で格納しています。datetimeをさまざまなセクションに分割する

私はいくつかの助けが必要な問題は、start_time属性から入力された日付を使用して、開始時刻と終了時刻がend_time属性の日付を構成します同じ日がある、ちょうど時間が異なるだろう。

<div class="field"> 
     <%= f.label :start_time %> 
     <%= f.datetime_select :start_time, :minute_step => 15, :default => Time.now+1.week, :order => [:month, :day, :year] %> 
    </div> 
    <div class="field"> 
     <%= f.label :end_time %> 

     <%= f.time_select :end_time, :ignore_date => true, :minute_step => 15 %> 
    </div> 

答えて

0

これはjavascriptで行う必要があります。

on key upイベントを使用します。

$("#start").keyup(function(){ 
    ... 
}); 

jqueryを使用する場合は、いずれかの入力で.val()ゲッターとセッターを使用します。

d = Date($("#start").val()) 

d2 = Date(d.getday(), d.getMonth(), d.getDay()); 

$("#end").val(d2); 

何かがそうです。

その目的のためにdatetimeオブジェクトのメソッドを使用して、日付を年月の年だけでフォーマットします。

+0

だから、隠しフィールドを使用して?確かに、フロントエンドではなくモデルで正しい日時を構築する方が理にかなっていますか? – Elliot

+0

なぜ彼らは隠されなければならないのですか? –

+0

入力されたモデルからどのように日付を構築するのですか? 2番目の日付を記入するためにフォームを提出する必要があります。明らかにあなたはそれを望んでいません。 –

0

次のコードでbefore_saveメソッドを追加することによって、これを解決:

sale_times.each do |sale| 
    sale.end_time = DateTime.parse("#{sale.start_time.strftime("%x")} #{sale.end_time}") 
end 

ビューコード:

<div class="field"> 
    <%= f.label :start_time %> 
    <%= f.date_select :start_time, :minute_step => 15, :default => Time.now+1.week, :order => [:month, :day, :year] %> 
</div> 
<div class="field"> 
    <%= f.label :end_time %>  
    <%= f.time_select :end_time, :minute_step => 15 %> 
</div> 
関連する問題