2011-08-24 29 views
19

Cuando envío mi formulario puedo ver la fecha en que se envió en la publicación. Sin embargo, no guarda la fecha. Si hago una verificación de fecha, dice que no está en el formato correcto. Aquí está mi función de selector de fecha, muestra bien:Rails 3 fecha del selector de fecha de jquery no guardada en la base de datos

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

los $ j es porque estoy utilizando prototipo, así que todas las llamadas jquery están utilizando la variable de la noConflict.

Aquí está el mensaje:

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

por lo que envía la multa fecha, pero no parece rieles para recibir el formato. Inserta un valor nulo en la base de datos. Si presento con el datefield defecto con los menús desplegables que envía esto y ahorra bien:

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"} 

En la instrucción de inserción se inserta la fecha como: '2011-06-22'

rieles Qué espera de la fecha en 3 variables construir el formato de fecha correctamente? ¿Cómo puedo obtener el datepicker para enviar el formato de fecha correcto?

Gracias de antemano,

Respuesta

36

Me encontré con el mismo problema. Una solución es simplemente cambiar el formato que utiliza el selector de fechas:

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

rieles parece ser capaz de manejar el formato aaaa-mm-dd - estoy usando eso y no estoy teniendo problemas de ahorro de la fecha de la base de datos. El único problema aquí es que algunos podrían encontrar el formato aaaa-mm-dd un poco menos guapo que dd/mm/aaaa ...

+0

Gracias, eso fue todo. – Xaxum

+2

Publicó una solución donde el usuario ve de una manera y envía el formato adecuado con hidden_field. De nuevo, gracias por señalar el problema original, ya que vi en otro lado que los rieles convertirían la fecha. – Xaxum

+0

solo para personas que corren en el mismo problema, el nombre del parámetro es 'format' y no' dateFormat' más – Viro

20

Como señaló @BaronVonBraun por encima de los carriles no parece para manejar ese formato. Cambiarlo como sugirió funcionó. Sin embargo, para aquellos que desean un formato diferente a aa-mm-dd, puede usar lo siguiente. El usuario ve el formato que desea mientras que los rieles obtienen el formato que necesita.

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

El show_date es el id del campo que ven y la mile_date es un campo oculto con las necesidades de los carriles de la fecha.

Aquí está el documentation.

0
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]); 
    } 
}); 
1

Si alguien está usando el jquery_datepicker gem, tendrá que usar algo similar al código siguiente en sus rieles ver.

<%= 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"))%> 

También puede utilizar form.datepicker_input para unir el selector de la fecha directamente a la forma, pero en mi caso de uso, quería que el selector de fecha para reflejar la fecha localizada, lo que los carriles no aceptarían. Así que agregué un elemento de formulario oculto y le puse el campo alternativo, ¡funciona a la perfección!

0

Un poco de hacky, pero hizo un ayudante las cosas claras cuando sé que estoy dando las fechas de servidor en el formato mm-dd-aa

def convert_to_y_m_d(date) 
    new_date = date.split("-")[2] + "-" + date.split("-")[0] + "-" + date.split("-")[1] 
    new_date 
end 
Cuestiones relacionadas