2011-05-01 6 views
6

En mi aplicación Rails 3, solo quiero escribir una entrada en un registro determinado si los cambios se realizan realmente en un modelo. Entonces, si un usuario no cambia ninguno de los campos y hace clic en 'Enviar', entonces no debe haber una entrada de registro.En un modelo de Rails 3, los atributos DateTime están falsamente "sucios"

Pero parece que pase lo que pase, Rails siempre parece pensar que los atributos DateTime del modelo han cambiado.

Cuando depuro, ejecuto las siguientes líneas durante mi actualización y ambas devuelven verdadero, lo que sería una contradicción.

@request.begin_date == @request.begin_date_was # Returns true 
@request.begin_date_changed? # Returns true 

Me pregunto si tiene algo que ver con cambiar el formato de fecha predeterminado en un inicializador (a '% m /% d /% Y') o posiblemente algo con zonas horarias.

Estoy perplejo, por lo que cualquier ayuda sería muy apreciada.

Respuesta

2

Puede cambiar la fecha y el formato predeterminado de tiempo en el archivo de configuración regional en.yml como esto: (esto es ejemplo para el formato francés en uno de mis proyectos)

date: 
formats: 
    default: "%d/%m/%Y" 
    short: "%e %b" 
    long: "%e %B %Y" 
    long_ordinal: "%e %B %Y" 
    only_day: "%e" 
time: 
formats: 
    default: "%d %B %Y %H:%M" 
    time: "%H:%M" 
    short: "%d %b %H:%M" 
    long: "%A %d %B %Y %H:%M:%S %Z" 
    long_ordinal: "%A %d %B %Y %H:%M:%S %Z" 
    only_second: "%S" 
am: 'am' 
pm: 'pm' 

o simplemente puede convertir su fecha y hora instancias a:
@ request.begin_date.strftime ("% m /% d /% y") == @ request.begin_date_was.strftime ("% m /% d /% y") o incluso:
l (@ request.begin_date,: format => your_format_in_locale_file) == l (@ request.begin_date_was,: format => your_format_in_locale_file)

espero que le ayudará a

1

Me di cuenta cuando se le preguntó, que fueron probablemente está utilizando una versión diferente rieles, pero me tropecé con esto mismo con rieles 3.2.5. Aparentemente es una regresión en 3.2.5, también: https://github.com/rails/rails/issues/6591

1

Llegué aquí desde una búsqueda en google por un problema similar. No estaba relacionado con la versión de Rails, pero descubrí después de algunas depuraciones que estaba asignando un objeto Time con milisegundos. Al llamar al changed, volví y una serie de objetos aparentemente idénticos, ya que se convirtió a DateTime. No estoy seguro de si esto puede considerarse un error en Rails o no, pero en caso de que termine con el mismo problema, compruebe que no está asignando la fecha y hora con milisegundos en ellos.

Cuestiones relacionadas