2016-06-14 19 views
1

In meinem Rails-Projekt gibt es eine Suchseite, die ein Drop-Down mit Datumsbereichswerten enthält, die durch (-) getrennt sind. Die Optionen der Drop-down sind wie:Rails: ActiveRecord nach Monat und Jahr abfragen

Jan,2014 - March,2014 
April,2014 - Jun,2014 
.... 
Oct,2014 - Dec,2014 

Benutzer eine dieser Datumsbereiche auswählen und nur diese Datensätze angezeigt werden, die in ausgewählten Datumsbereich fallen. Das Feld zum Filtern nach ist start_date mit einem Zeitstempelfeld.

Deshalb möchte ich etwas wie folgt aus:

filter = params[:filter].split("-") 
@posts = Post.where(start_date: filter[0]..filter[1]) 

Aber in params ich nur Monat und Jahr. Wie kann ich diese Werte analysieren, damit die obige Abfrage funktioniert?

Antwort

4

Hey können Sie versuchen, Zeichenfolge auf dem Laufenden analysieren mit Date.strptime

filter = params[:filter].split(" - ") 

Convert String Datum strptime

st_date = Date.strptime(filter[0],"%B,%Y") 
end_date = Date.strptime(filter[1],"%B,%Y") 

daterange als Beginn des ersten Monats bis zum Ende des zweiten Monats

erstellen mit
date_range = st_date.beginning_of_month..end_date.end_of_month 

@posts = Post.where(:start_date => date_range) 
+0

Danke. Das Ende_Datum wurde Fehler, also teile ich es durch ("-") statt ("-") – Arif

+0

@Arif können Sie es entsprechend Ihrem String-Format verwalten –

+0

Ja, es angepasst, danke. Es gab extra Plätze. Danke – Arif

Verwandte Themen