¿Estamos haciendo una pregunta de interfaz aquí (es decir, desea un widget) o una pregunta de ActiveRecord?
fecha de picking Reproductores
1) Rieles Solución defectodate_select
: véase la documentación here.
2) Utilice un complemento: ¿Por qué escribir código? Personalmente me gusta el plugin CalendarDateSelect, usando un par de retoños cuando necesito un rango.
3) Adaptar un widget Javascript para Rieles: Es casi trivial para integrar algo así como la biblioteca de interfaz de usuario Yahoo (YUI) Calendar, que es todo Javascript, a rieles. Desde la perspectiva de Rails es solo otra manera de poblar el params[:start_date]
y el params[:end_date]
. YUI Calendar tiene soporte nativo para rangos.
Obtención de los datos de los widgets
1) defecto Rails Solucióndate_select
Ver documentación here.
#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 a la anterior, sólo con más atractivo UI visible.
3) Adapte un widget de Javascript: Normalmente esto significa que algún elemento de formulario tendrá la fecha de entrada 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])
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
Un poco de ambos widget y registro activo pero lo que estoy realmente curioso sobre es cómo mostrar restfully una fecha oscilado lista basada en las fechas seleccionadas por el usuario. Específicamente, la mejor manera de obtener la entrada del usuario en el registro activo. – srboisvert
Me he tomado la libertad de ampliar mi respuesta para ser más útil para usted. –
no debería build_date_from_params entrar en el controlador de la aplicación en lugar de la aplicación de ayuda? – inglesp