2009-10-06 5 views
1

Je construis une application pour les tests cognitifs dans Rails.
J'ai un certain nombre de tests (Quiz objets) pour mes visiteurs. Dans la page d'accueil, je souhaite afficher uniquement les quiz prêts à être consommés: ils doivent contenir un certain nombre de questions et un certain nombre de réponses possibles.
Bien sûr, je pourrais interroger avec SQL, ou créer une méthode de classe retrying tous les objets où Quiz.questions.size > 1 && Quiz.answer.size > 1. Encore, j'aimerais une manière plus élégante/abstraite.
Existe-t-il un moyen d'interroger une méthode 'prête' agissant comme si elle était une méthode ActiveRecord, donc je peux appeler Quiz.find_all_by_ready(1) et mettre ready dans n'importe quelle condition de quiz? La mise en cache est une possibilité, je me demandais s'il y avait une alternative dynamique. Comment un gourou des rails pourrait-il résoudre le problème?Champ calculé dans RoR (agissez comme une méthode ActiveRecord)

Cheers,
Davide

Répondre

3

En utilisant une combinaison de named_scope et counter_caches vous pourriez faire quelque chose comme ceci:

class Quiz < AR:B 
    named_scope :ready, :conditions => ['quizes.questions_count > 0 AND quizes.answers_count > 0'] 
end 

@quizes = Quiz.ready 

J'espère que cela aide!

+0

Je suppose que c'est la solution la plus simple, merci! – nutsmuggler