2009-06-19 4 views
0

Nous avons un contrôle de grille qui permet à un utilisateur de filtrer du texte dans différents champs. Un certain nombre de ces champs peuvent être des horodatages, comme created_at et updated_at.Filtrage par sous-chaînes de date dans Rails

Maintenant, un utilisateur peut faire beaucoup de différents types de filtres, y compris>, <,> =, < =, etc. Ainsi, une requête qui vient en face de la commande pourrait ressembler à:

« created_at> 2009 ", ou" created_at> = 2006 et created_at < = 2010 ".

La base de données ne reconnaît pas les années comme étant des horodatages valides et les rails ne les convertissent pas automatiquement en tant que tels. Existe-t-il des plugins ou des méthodes idiomatiques pour accomplir une année, ou mieux, une partie d'un horodatage, en faisant une meilleure estimation du sens et en le convertissant en un horodatage de base de données utilisable?

Répondre

3

Jetez un oeil sur les projets suivants

Par exemple, searchlogic prend en charge les conditions comme celle qui suit.

Post.all(:conditions => { :hour_of_created_at => 9 }) 
+0

searchlogic semble mintox - Je pense que ça va faire ce qui est nécessaire ici, bien que je ne l'ai pas mis en œuvre encore moi-même. – mlambie

2

created_at> 2009

Post.all(:conditions => ["created_at > ?", Date.new(y = 2010, m = 1, d = 1).to_s]) 

created_at> = 2006

Post.all(:conditions => ["created_at >= ?", Date.new(y = 2006, m = 1, d = 1).to_s]) 

created_at < = 2010

Post.all(:conditions => ["created_at <= ?", Date.new(y = 2010, m = 12, d = 31).to_s]) 

Quelque chose comme ça peut-être?

1

vous pouvez utiliser Time classe de rubis

Time.local(2010) # => Fri Jan 01 -0600 2010 

ou

Time.gm(2010) # => Fri Jan 01 00:00:00 UTC 2010 
Questions connexes