2010-12-26 4 views
2

j'ai un module "Job" (et table correspondante dans la db), ce module ont un champ appelé scheduled_run (datetime) et un champ appelé user_id:rubis - obtenir des documents filtrés par date

  1. comment peut je reçois tous les travaux qui appartiennent à un utilisateur et sont prévus pour aujourd'hui?
  2. Comment puis-je obtenir tous les travaux qui appartiennent à un utilisateur et sont programmés pour la semaine dernière?
+0

Au lieu de "module" voulez-vous dire "Classe"? –

Répondre

1

Pour obtenir tous les emplois qui appartiennent à un utilisateur et sont prévues pour aujourd'hui, vous devez rechercher tous scheduled_runs dans la période de temps aujourd'hui:

user = User.find(1) # Will get the user with ID 1 
jobs = Job.where("user_id = :id AND scheduled_run >= :start AND scheduled_run < :end", 
       :id => user.id, 
       :start => Date.today, 
       :end => 1.day.from_now.to_date) 

Pour obtenir tous les emplois la semaine dernière , nous ferons une commande similaire, mais nous allumons :start et :end pour être le début et la fin de la semaine:

user = User.find(1) # Will get the user with ID 1 
jobs = Job.where("user_id = :id AND scheduled_run >= :start AND scheduled_run < :end", 
       :id => user.id, 
       :start => 1.week.ago.to_date, 
       :end => Date.today) 

Dans les deux commandes ci-dessus, to_date provoquera ActiveRecord pour traiter e e résultat DateTime comme début de la journée.

1

Quelque chose comme:

Job.where(:user_id => some_user_id, :scheduled_run => Date.today).all 

Pour trouver ceux pour la semaine dernière, vous aurez besoin de spécifier une plage de dates. Je vais vous laisser comprendre cette partie. Vous devez utiliser une "condition de plage" ou une "condition de sous-ensemble" mentionnée dans le guide ActiveRecord. Les rails ActiveRecord Guide sont bons à lire. Consultez également la section "Conditions" du document ActiveRecord.

0

Est-ce du rubis ordinaire ou utilisez-vous des rails ou un autre ORM/cadre? Je suppose que beaucoup, puisque le questiontag marque activerecord

Cela pourrait se faire comme ceci:

Job.where("user_id = ? AND datetime = ?", user_id, datetime).all 

plus dans la documentation Rails ici http://api.rubyonrails.org/classes/ActiveRecord/Base.html

Vous pouvez également utiliser des plages de dates, juste creuser un peu autour des docs;)

Questions connexes