2010-01-21 3 views

Répondre

1

Ceci est souvent mis en œuvre au moyen d'un champ nommé qui fait la restriction appropriée qui identifie les enregistrements sont visibles au point courant dans le temps:

class MyRecord < ActiveRecord::Base 
    named_scope :visible, 
    :conditions => 'visible_from<=UTC_TIMESTAMP() AND visible_to>=UTC_TIMESTAMP' 
end 

Ceci peut être modifié pour utiliser des supports de lieux pour dates plus arbitraires:

class MyRecord < ActiveRecord::Base 
    named_scope :visible_at, lambda { |date| { 
    :conditions => [ 
     'visible_from<=? AND visible_to>=?', 
     date, date 
    ] 
    }} 
end 

on peut supposer que les dates sont stockées en tant que UTC, car il est une nuisance considérable pour convertir un temps local à un autre aux fins de afficher.

Vous pouvez sélectionner tous les modèles visibles comme ceci:

@records = MyRecord.visible.all 
@records = MyRecord.visible_at(2.weeks.from_now) 
0

Si vous le faisiez pour "donné_date".

select * 
from table 
where start_date <= given_date 
and end_date >= given_date 
+0

D'ailleurs, est-ce pas une question de SQL? –

0

Voici comment vous le feriez en utilisant l'enregistrement actif.

Foo.find(:all, :conditions => ['valid_from <= ? and valid_to >= ?', valid_date, valid_date]) 
Questions connexes