Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

213
Vistas
Ruby on Rails cambiando la fecha sin guardar en el objeto

Estoy tratando de cambiar una entrada de 'hora' con la fecha ingresada en la entrada de 'fecha'. Entonces, si la hora es "2000-01-01 10:00:00 UTC" y la fecha es "2021-10-10", quiero que la salida sea "2021-10-10 10:00:00 UTC".

Sin embargo, casi lo tengo funcionando; cuando asigno la fecha actualizada al objeto original, no guarda el cambio. Por ejemplo, en el código a continuación, event_time contiene el tiempo adecuado que quiero, sin embargo, asignarlo a @event.time y luego imprimir @event.time muestra que el cambio no tuvo lugar.

 def create @event = Event.new(event_params) event_date = @event.date event_time = @event.time.change(:year => event_date.year, :month => event_date.month, :day => event_date.day) puts event_time # prints 2021-10-22 06:06:00 UTC @event.time = event_time puts @event.time # prints 2000-01-01 06:06:00 UTC if @event.save redirect_to(events_path) else render('new') end end

¿Alguna sugerencia? Soy nuevo en Ruby, así que probablemente me estoy perdiendo algo obvio aquí

Aquí está mi esquema

 create_table "events", force: :cascade do |t| t.date "date" t.string "description" t.boolean "isMandatory" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.string "name" t.time "time" t.string "location" end
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Puede consultar la respuesta SO aquí

El problema es que no hay una clase de hora del día en Ruby o Rails. Todas las clases de tiempo son fechas o marcas de tiempo (es decir, fecha más hora del día). Dentro de la base de datos será una columna de tiempo (sin zona horaria) y se comportará correctamente dentro de la base de datos. Sin embargo, una vez que la hora llega a Ruby, ActiveRecord agregará un componente de fecha porque no hay una clase de hora del día simple disponible, simplemente usa 2000-01-01 como fecha. Todo estará bien dentro de la base de datos, pero deberá tener un poco de precaución para ignorar el componente de fecha cuando esté fuera de la base de datos en Rails.

Use el datetime de columna de fecha y hora para contener una fecha y una hora. Solo use el time en la migración si no necesita la fecha (solo desea almacenar la parte del tiempo).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda