Pregunta

¿Cómo haría para generar informes por rangos de fechas seleccionados por el usuario en una aplicación de Rails? ¿Cuáles son los mejores recolectores de rango de fecha?

edite en respuesta a patrick: estoy buscando un poco de widgets y consejos de registro activo, pero lo que realmente me interesa es cómo mostrar una lista de rangos de fechas en función de las fechas seleccionadas por el usuario.

¿Fue útil?

Solución

¿Estamos haciendo una pregunta de interfaz aquí (es decir, quieres un widget) o una pregunta de ActiveRecord?

Widgets de selección de fecha

1) Solución de Rails por Defecto : vea date_select documentación aquí .

2) Usar un complemento : ¿Por qué escribir código? Personalmente, me gusta el complemento CalendarDateSelect , usando un par de tontos cuando necesito un rango.

3) Adapte un widget de Javascript a Rails : es casi trivial integrar algo así como la biblioteca de Yahoo UI (YUI) Calendar , que es todo Javascript, para Rails. Desde la perspectiva de Rails, es solo otra forma de completar los params [: start_date] y params [: end_date] . YUI Calendar tiene soporte nativo para rangos.

Obtención de los datos de los Widgets

1) Solución de Rails por Defecto Vea date_select documentación aquí .

#an application helper method you'll find helpful
#credit to http://blog.zerosum.org/2007/5/9/deconstructing-date_select

# Reconstruct a date object from date_select helper form params
def build_date_from_params(field_name, params)
  Date.new(params["#{field_name.to_s}(1i)"].to_i, 
       params["#{field_name.to_s}(2i)"].to_i, 
       params["#{field_name.to_s}(3i)"].to_i)
end

#goes into view
<%= date_select "report", "start_date", ... %>
<%= date_select "report", "end_date", ... %>    

#goes into controller -- add your own error handling/defaults, please!
report_start_date = build_date_from_params("start_date", params[:report])
report_end_date = build_date_from_params("end_date", params[:report])    

2) CalendarDateSelect : Más bien similar al anterior, solo que con una IU visible más atractiva.

3) Adaptar un widget de Javascript : por lo general, esto significa que algún elemento del formulario tendrá la entrada de fecha como una cadena. Buenas noticias para ti, ya que Date.parse es algo de magia seria. Rails inicializará los parámetros [: some_form_element_name] por usted.

#goes in controller.  Please handle errors yourself -- Javascript != trusted input.
report_start_date = Date.parse(params[:report_start_date])

Escribiendo la llamada a ActiveRecord

Fácil como pastel.

  #initialize start_date and end_date up here, by pulling from params probably
  @models = SomeModel.find(:all, :conditions => ['date >= ? and date <= ?',
    start_date, end_date])
  #do something with models

Otros consejos

No es una práctica RÁPIDA tener parámetros de URL que controlen el rango de registros seleccionados. En su acción de índice, puede hacer lo que Patrick sugirió y tener esto:

  #initialize start_date and end_date up here, by pulling from params probably
  @models = SomeModel.find(:all, :conditions => ['date >= ? and date <= ?', params[:start_date], params[:end_date]])

Luego, en su vista de índice, cree un formulario que se ajuste a? start_date = 2008-01-01 & amp; end_date = 2008-12-31 a la URL. Recuerde que es una entrada proporcionada por el usuario, así que tenga cuidado con ella. Si lo vuelve a colocar en la pantalla en su acción de índice, asegúrese de hacerlo así:

Showing records starting on 
<%= h start_date %> 
and ending on 
<%= h end_date %>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top