Champ calculé en RoR (acte comme une méthode ActiveRecord)
-
20-09-2019 - |
Question
Je construis une application pour les tests cognitifs dans Rails.
J'ai un certain nombre de tests (objets de Quiz
) pour mes visiteurs. Dans la page d'accueil Je veux montrer que des jeux-questionnaires qui sont prêts à la consommation: ils doivent avoir 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 réessayant tous les objets où Quiz.questions.size > 1 && Quiz.answer.size > 1
.
Pourtant, je voudrais une façon plus élégante / abstraire.
Est-il possible d'interroger ont une méthode « prêt » d'agir comme si elle était une méthode ActiveRecord, donc je peux appeler Quiz.find_all_by_ready(1)
et mettre ready
dans toutes les conditions de jeu-questionnaire?
Mise en cache est une possibilité, je me demandais s'il y avait une alternative dynamique. Comment un gourou de rails résoudrait le problème?
Cheers,
Davide
La solution
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!