Rails 3 jquery дата выбора даты не сохраняется в базе данных - PullRequest
19 голосов
/ 24 августа 2011

Когда я отправляю свою форму, я вижу дату отправки сообщения. Тем не менее, это не сохраняет дату. Если я проверяю дату, она говорит, что она не в правильном формате. Вот моя функция выбора даты, она отображается нормально:

    $j(function(){
    $j("#mile_date").datepicker();
});

$ j потому, что я использую и прототип, поэтому все вызовы jquery используют переменную noconflict.

Вот этот пост:

 Parameters: {"utf8"=>"Γ£ô", "authenticity_token"=>"Fj4HW/B4EOan/vcPZLJ75TvWkRH4ZKSFsPLlQLSD0cI=", "mile"=>{"odometer"=>"", "trip"=>"428.2
", "gallons"=>"24.959", "note"=>"", "temperature"=>"", "date"=>"06/22/2011"}, "commit"=>"Create Mile"}

Так что дата отправляется нормально, но рельсам формат не нравится. Он вставляет нулевое значение в базу данных. Если я отправляю его с полем даты по умолчанию с выпадающими списками, он отправляет это и сохраняет нормально:

    Parameters: {"utf8"=>"Γ£ô", "authenticity_token"=>"Fj4HW/B4EOan/vcPZLJ75TvWkRH4ZKSFsPLlQLSD0cI=", "mile"=>{"odometer"=>"", "trip"=>"428.2
", "gallons"=>"24.959", "mpg"=>"17.156136063144", "note"=>"", "temperature"=>"", "date(1i)"=>"2011", "date(2i)"=>"6", "date(3i)"=>"22"}, "c
ommit"=>"Create Mile"}

В операторе вставки дата вставляется в виде: '2011-06-22'

Ожидает ли Rails, что дата в 3 переменных правильно построит формат даты? Как я могу заставить указатель даты отправлять правильный формат даты?

Заранее спасибо,

Ответы [ 6 ]

37 голосов
/ 24 августа 2011

Я столкнулся с той же проблемой. Одно из решений состоит в том, чтобы просто изменить формат, который использует средство выбора даты:

// in your javascript...
$j(function(){
  $j("#mile_date").datepicker({
    dateFormat: "yy-mm-dd"
  });
});

Rails, похоже, может обрабатывать формат yy-mm-dd - я использую его, и у меня нет проблем с сохранением даты в базе данных. Единственная проблема здесь в том, что некоторые могут посчитать формат гг-мм-дд немного менее привлекательным, чем мм / дд / гггг ...

20 голосов
/ 25 августа 2011

Как отмечает @BaronVonBraun выше рельсы, кажется, не справляются с этим форматом.Изменение, как он предложил, сработало.Однако для тех, кто хочет использовать формат, отличный от yy-mm-dd, вы можете использовать следующее.Пользователь видит нужный вам формат, а rails получает необходимый ему формат.

$j(function(){
    $j("#show_date").datepicker({altField: '#mile_date', altFormat: 'yy-mm-dd'});
});

show_date - это идентификатор поля, которое они видят, а mile_date - скрытое поле с необходимыми датами.

Вот документация .

1 голос
/ 24 мая 2013

Если кто-либо использует jquery_datepicker gem , вы захотите использовать что-то похожее на следующий код в вашем представлении rails.

<%= form.hidden_field(:ship_date, :id => "ship_date") %>   
<%= datepicker_input(:show_date, item.id, :size => 10, altField: "#ship_date", altFormat: 'yy-mm-dd', :value => item.ship_date.strftime("%m/%d/%Y"))%>

Вы также можете использовать form.datepicker_input, чтобы прикрепить средство выбора даты непосредственно к форме, но в моем случае использования я хотел, чтобы средство выбора даты отражало локализованную дату, которую Rails не принимает.Поэтому я добавил скрытый элемент формы и установил в него альтернативное поле, работает отлично!

0 голосов
/ 17 декабря 2016

Что-то вроде хакерства, но я помогал разобраться в вещах, когда я знаю, что даю серверные даты в формате mm-dd-yy

def convert_to_y_m_d(date)
  new_date = date.split("-")[2] + "-" + date.split("-")[0] + "-" + date.split("-")[1]
  new_date
end
0 голосов
/ 16 декабря 2011
j('.jquery-calendar').datepicker().each(function(){
  // convert dates from db to US format
  var $input = j(this)
  var found = $input.val().match(/^(\d{4})-(\d{2})-(\d{2})$/);
  if(found){
    $input.val(found[2]+'/'+found[3]+'/'+found[1]);
  }
});
0 голосов
/ 06 декабря 2011

Или попробуйте камень delocalize: https://github.com/clemens/delocalize

...