ruby-on-rails report date-range

ruby on rails - Generar un informe por rango de fechas en rieles



ruby-on-rails report (2)

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

Fecha de selección de widgets

1) Solución de rieles predeterminada : consulte la documentación de date_select aquí .

2) Use un complemento : ¿Por qué escribir código? Personalmente me gusta el complemento CalendarDateSelect , usando un par de los retoños cuando necesito un rango.

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

Obtener los datos de los widgets

1) Solución de rieles predeterminada Consulte la documentación de date_select 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 : bastante similar al anterior, solo con una interfaz de usuario más atractiva.

3) Adaptar un widget Javascript : Normalmente, esto significa que algún elemento de formulario tendrá la fecha ingresada como una cadena. Una gran noticia para ti, ya que Date.parse es una gran magia. Los parametros [: some_form_element_name] serán inicializados por Rails para usted.

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

Escribir la llamada a ActiveRecord

Muy fácil.

#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

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

editar en respuesta a patrick: estoy buscando un poco de widget y consejo de registro activo, pero lo que realmente me interesa es cómo mostrar de forma relajada una lista de fechas de acuerdo con las fechas seleccionadas por el usuario.


No es una práctica inofensiva 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 siga? Start_date = 2008-01-01 & end_date = 2008-12-31 a la URL. Recuerde que es una entrada proporcionada por el usuario, así que tenga cuidado con ella. Si vuelve a colocarlo 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 %>