2011-10-11 3 views
1

Un modèle nommé Post, correspondant à la table des messages de la base de données. Post.find_within_4_days peut me recevoir les 4 derniers jours. Toutes mes opérations suivantes seraient basées sur les 4 derniers jours. Je voudrais qu'il soit filtré ou défini quelque part, donc je peux juste le référencer au lieu de répéter Post.find_within_4_days partout. Comment faire dans le modèle Post?Comment utiliser le filtre dans le modèle

Répondre

2

Encore plus souple:

class Post < ActiveRecord::Base 
    scope :within, lambda { |time| where("created_at > ?", Time.zone.now - time } 
end 

Post.within(4.days) 
3

En supposant que vous utilisez Rails 3, vous pouvez utiliser un champ de nom comme celui-ci:

class Post < ActiveRecord::Base 
    scope :within_4_days, where(# however you find your 4 day old posts #) 
end 

Vous pouvez ensuite utilisez Post.within_4_days partout.

Si vous voulez que les messages des 4 derniers jours partout, vous pouvez configurer un champ par défaut à la place:

class Post < ActiveRecord::Base 
    default_scope where(# however you find your 4 day old posts #) 
end 

après quoi (par exemple) Post.all ne ferait que renvoyer les messages des 4 derniers jours .

Questions connexes