Stellen wir hier eine Interface-Frage (d. H. Sie wollen ein Widget) oder eine ActiveRecord-Frage?
Datum Picking Widgets
1) Standard Rails Lösung: Siehe date_select
Dokumentation here.
2) Verwenden Sie ein Plugin: Warum Code schreiben? Ich persönlich mag das CalendarDateSelect Plugin, mit einem Paar der Saugnäpfe, wenn ich eine Reichweite brauche.
3) Passen Sie ein Javascript Widget Rails: Es ist fast trivial ist so etwas wie die Yahoo UI-Bibliothek (YUI) Calendar, die alle Javascript, um Rails zu integrieren. Aus der Perspektive von Rails ist es nur eine weitere Möglichkeit, die params[:start_date]
und params[:end_date]
zu besetzen. YUI Calendar bietet native Unterstützung für Bereiche.
Abrufen der Daten aus den Widgets
1) Standard Rails Lösung Siehe date_select
Dokumentation 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: Eher ähnlich wie oben, nur mit sexier sichtbar UI.
3) Ein JavaScript-Widget anpassen: In der Regel bedeutet dies, dass bei einigen Formularelementen das Datum als Zeichenfolge eingegeben wird. Gute Neuigkeiten für dich, da Date.parse eine ernsthafte Magie ist. Die Parameter [: some_form_element_name] werden von Rails für Sie initialisiert.
#goes in controller. Please handle errors yourself -- Javascript != trusted input.
report_start_date = Date.parse(params[:report_start_date])
Schreiben der Aufruf von Active
Einfach als Torte.
#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
ein bisschen von beidem Widget und aktiven Datensatz, aber was ich wirklich neugierig ist, wie erholsam, um ein Datum anzuzeigen reichte Liste basierend auf vom Benutzer ausgewählten Daten. Insbesondere, wie Sie am besten die Eingabe vom Benutzer in den aktiven Datensatz finden. – srboisvert
Ich habe mir die Freiheit genommen, meine Antwort zu erweitern, um für Sie hilfreicher zu sein. –
sollte Build_date_from_params nicht in den Anwendungscontroller und nicht in den Anwendungshelfer gehen? – inglesp