2016-04-25 14 views
0

の日付フォーマット:レール:私は形式で日付を表示日付ピッカーを持つフォームを持つフォームとデータベース

'%m/%d/%Y' 

私がフォームを送信する際に問題が、この形式が有効な日付ではありませんしたがって、INSERT INTO/UPDATEのデータベースには送信されません。

私はオブジェクトをデータベースに保存する前にこのような何かを行うことができますことを見てきました
'%Y-%d-%m' 

my_object.due_date = params[:content_date].to_date.strftime("%Y-%d-%m") 

しかし、私はこの形式で日付を提出した場合

にもかかわらず、それは動作します複数の日付フィールドと日付フィールドを持つ複数のモデルがあるので、どこでもstrftime()を実行しないようにしたいと思います。

あなたはより良い解決策をお持ちですか?

+0

どの日付ピッカーですか? 1つの形式で表示することも、別の形式でサーバーに送信することもできます。 IMOの最善の策は、端を除いてISO8601( 'YYYY-MM-DD')を使うことです。 –

+0

私はブートストラップdatepickerを使用しています –

+0

あなたはそれがサポートしているオプションについてのドキュメントをチェックしましたか? –

答えて

0

datetime pickerのためにgem 'momentjs-rails'を使用しています。

モデル

#deadline is saved in the db 
#this is the getter-setter for deadline_string 
def deadline_string 
    deadline.to_datetime.iso8601 
end 

def deadline_string=(deadline_str) 
    self.deadline = deadline_str 
end 

フォーム

#new form 
<div class="field form-group"> 
    <%= f.label :deadline %> 
    <%= f.text_field :deadline, class: "form-control new-task-deadline" %> 
</div> 

#edit form 
<div class="field form-group"> 
    <%= f.label :deadline %> 
    <%= f.text_field :deadline_string, class: "form-control edit-task-deadline" %> 
</div> 

JS get要求にすてきなデータを表示するために

$('.new-task-submit').on('click', function (e){ 
    e.preventDefault(); 
    var localMoment = moment($('.new-task-deadline').val()); 
    $('.new-task-deadline').val(localMoment.toISOString()); 
    $('#newtask').submit(); 
}); 

$(document).on('click', '.edit-task-submit', function (e){ 
    e.preventDefault(); 
    var deadlineField = $('.edit-task-deadline'); 
    var localMoment = moment(deadlineField.val()); 
    var railsDate = localMoment.toISOString(); 
    deadlineField.val(railsDate); 
    $(".task-update-form").submit(); 
}); 

JSをDBへ保存

//setting time and datetimepicker when opening edit task modal 
$(document).on('shown.bs.modal', '#update-task-modal', function (e) { 
    var deadlineField = $('.edit-task-deadline'); 
    var deadlineValue = deadlineField.attr('value'); 
    var momentDeadline = moment(deadlineValue).format('MM/DD/YYYY hh:mm A'); 
    deadlineField.val(momentDeadline); 
    deadlineField.datetimepicker({ 
    sideBySide: true, 
    format: 'MM/DD/YYYY hh:mm A', 
    stepping: 15, 
    widgetPositioning: { vertical: 'bottom' } 
    }); 
}); 
関連する問題