2012-05-21 8 views
0

J'ai une collection de lieux et ces lieux ont de nombreux OpenTimes pour dire si le lieu est actuellement ouvert à cette heure de la semaine. Je veux interroger tous les sites qui sont actuellement ouverts.Interrogez les lieux actuellement disponibles

J'ai actuellement une méthode en venue.rb qui est appelée 'def active' qui passe par open_times et vérifie si Time.now est dans la plage des champs open_time: start et: end.

Comment puis-je créer une requête qui donne tous les lieux actuellement ouverts?

J'espère créer un champ qui est quelque chose comme Venue.all.currently_available

+0

Le Lieu est ouvert quand il a au moins un OpenTime avec des plages de temps autour de Time.now, non? – jdoe

+0

Oui, c'est correct. – codabrink

+0

Petite question ambiguë: soit vous voulez interroger tous les sites ouverts, ou simplement vérifier si le lieu est disponible. Choisissez un :) – jdoe

Répondre

2

Essayez ceci:

# in Venue class 
def available? 
    open_times.where(':now BETWEEN open_times.start AND open_times.end', now: Time.now).exists? 
end 

UPD: Pour interroger tous ouverts Lieux utilisent:

def self.currently_available 
    joins(:open_times). 
    where(':now BETWEEN open_times.start AND open_times.end', now: Time.now). 
    uniq 
end 

Appel: Venue.currently_available

+0

ça devrait être un lambda, je pense. Sinon, Time.now ne sera évalué qu'une seule fois, lorsque l'application est chargée. – Roman

+0

@Roman Now way! C'est une méthode, pas une portée! – jdoe

+0

à droite, j'avais un objectif en tête :) pour le "tous les lieux ouverts" comme dans la question. nm. :) – Roman

Questions connexes