Comment définir un named_scope de retourner tous les enregistrements qui ont été créés au cours des 7 derniers jours, et comment puis-je utiliser que la portée nommée dans un contrôleur?RoR: named_scope, tous les enregistrements créés au cours des 7 derniers jours?
Répondre
je vous recommande de regarder la Railscast Episode on named_scope.
Idéalement, le code que vous cherchez serait:
named_scope :recent,
lambda { |*args| {:conditions => ["created_at > ?", (args.first || 7.days.ago)]} }
Cela vous permettra de passer un paramètre à la portée du nom ou il sera par défaut sur les 7 derniers jours.
Vous appelez à l'aide:
MyModel.recent
Vous devez passer named_scope un proc il sera évalué chaque fois que l'appel à named_scope est exécuté. Sinon, si vous spécifiez Time.now, il s'exécutera une fois (au premier appel) et sera "mis en cache" jusqu'à ce que l'application soit redémarrée.
named_scope \
:this_week,
:conditions => [
%created_at > :time!,
proc {{:time => Time.now}}
]
Vous pouvez appeler le named_scope comme @ ar_object.this_week
cet exemple renvoie des erreurs. "type inconnu de% string% created_at" –
fonctionne très bien, merci. –
Je suis encore nouveau sur Rails, mais j'adore * cette fonction! –