Frage

Wie würden Sie gehen über die Berichte von Benutzer ausgewählten Datumsbereiche in einer Rails-Anwendung produziert? Was sind die besten Datumsbereich Pflücker?

bearbeitet als Antwort auf patrick: Ich bin auf der Suche nach einem bisschen sowohl Widget und aktiven Datensatz Beratung, aber was ich über wirklich neugierig ist, wie erholsam ein aktualisiertes Verzeichnis basierend auf Benutzer ausgewählten Daten lagen im Bereich angezeigt werden soll.

War es hilfreich?

Lösung

Sind wir eine Schnittstelle Frage hier gefragt (das heißt wollen Sie ein Widget) oder eine Active Frage?

Datum Picking Widgets

1) Standard-Rails-Lösung : Siehe date_select Dokumentation hier .

2) Verwenden Sie ein Plugin : Warum Code schreiben? Ich persönlich mag das CalendarDateSelect Plugin, um ein Paar des Saugers zu verwenden, wenn ich einen Bereich benötigen.

3) Passen Sie ein Javascript Widget Rails : Es ist fast trivial ist so etwas wie die Yahoo UI-Bibliothek (YUI) Kalender , die alle Javascript, um Rails ist. Aus der Perspektive der Rails seinen nur ein weiterer Weg, um die params[:start_date] und params[:end_date] zu füllen. YUI Kalender hat native Unterstützung für Bereiche.

Abrufen der Daten aus der Widgets

1) Standard-Rails-Lösung Siehe date_select Dokumentation hier .

#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 :. Vielmehr ähnlich wie oben, nur mit sexier sichtbar UI

3) Passen Sie einen Javascript-Widget : In der Regel bedeutet dies, dass irgendeine Form Element die Datumseingabe als String hat. Gute Nachrichten für Sie, da Date.parse ist einige ernsthafte Magie. Die params [: some_form_element_name]. Wird von Rails für Sie initialisiert werden

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

Das 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

Andere Tipps

Es ist nicht eine unruhige Praxis URL-Parameter steuern den Bereich der ausgewählten Datensätze zu haben. In Ihrem Index Aktion können Sie das tun, was Patrick vorgeschlagen und haben dies:

  #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]])

Dann in Ihrem Index Ansicht, erstellen Sie eine Form, die Angriffe auf? Start_date = 2008-01-01 & end_date = 2008-12-31 an die URL. Denken Sie daran, dass es Benutzereingaben sind, so mit ihm vorsichtig sein. Wenn Sie es auf dem Bildschirm in Ihrem Index Aktion setzen, sollten Sie es wie dies zu tun:

Showing records starting on 
<%= h start_date %> 
and ending on 
<%= h end_date %>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top