Rieles: combine 3 menús desplegables seleccionados para modificar 1 atributo de un modelo

Así que normalmente uso el date_select ayudante en mis aplicaciones de Rails en los formularios de mis Modelos, pero en la aplicación más reciente que estaba creando, necesitaba especificar ID de css individuales para cada menú desplegable (mes, día, año), y eso no es posible con date_select. Entonces, en cambio, he estado usando select_month, select_dayy select_year ayudantes Aquí está el problema: ¿cómo hago para que todos describan uno? datetime registro en mi base de datos?

(He mirado esta pregunta por cierto, pero me parece bastante inútil. Además, no quiero hacer cosas de jQuery hacky manejando esto).

Esto es lo que tengo hasta ahora:

#default_time_for is just a helper method that returns the default time for the specified "period" of time (month,day,etc.)

<%= select_month(default_time_for(:month)) %>
<%= select_day(default_time_for(:day)) %> 
<%= select_year(default_time_for(:year), {:start_year => Time.now.year-18, :end_year => 1930}) %>

preguntado el 12 de junio de 12 a las 18:06

1 Respuestas

Los combinaría en el lado del servidor:

require 'date'

def update
  date = Date.parse(params[:year] + params[:month] + params[:day])

  # Add to object and save
end

Todavía puede hacer una asignación masiva, asumiendo que date es el campo que desea asignar, puede hacer lo siguiente:

def update
  date = Date.parse(params[:year] + params[:month] + params[:day])
  params = params.merge( { :user => { :date => date }})

  @user = User.find(params[:id])
  if @user.update_attributes(params)
    # save was good
  else
    # save was bad
  end
end

También asegúrese de estar familiarizado y mitigado contra el valor emitido en caja por Asignación Masiva si vas a usar el código anterior.

Respondido el 12 de junio de 12 a las 18:06

La razón por la que dudo en hacer esto es porque tengo muchos campos, y solo iba a asignarlos en masa... ¿hay alguna forma de mantener el resto de los atributos asignables en masa? (Quiero hacer User.save(params[:user]) para el resto de los atributos si es posible) - Varatis

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.