J'ai les modèles suivants pour les utilisateurs, les entreprises, les sondages, les questions et réponses.Obtenir des objets spécifiques avec des étendues
- La société a une relation de
has_many
enquêtes - La société a une relation de
has_many
utilisateurs - L'enquête a une relation de
has_many
des questions - La question a une relation de
has_many
réponses sur - L'utilisateur a une relation de
has_many
réponses
Donc, d'après cela, l'entreprise a quelques utilisateurs et quelques enquêtes. Ces enquêtes ont quelques questions et chaque question a des réponses, les réponses viennent de certains utilisateurs.
Ce que je veux faire est de vérifier la dernière enquête et obtenir les utilisateurs spécifiques qui n'ont répondu à aucune question sur l'enquête. J'ai essayé d'accomplir cela en utilisant chaque boucle, de faire une boucle sur les utilisateurs de l'entreprise puis de boucler chaque question utilisateur de la dernière enquête puis de boucler sa réponse pour obtenir les utilisateurs qui ont répondu à au moins une question et les insérer dans un tableau , après ces boucles, j'ai la différence entre les deux tableaux pour obtenir seulement les utilisateurs qui n'ont répondu à aucune question. Cette méthode fonctionne bien, mais je pense qu'il existe une meilleure façon de faire cela, peut-être en utilisant des portées ou s'il y a des portées imbriquées. Je veux juste un moyen propre et direct autre que cette façon de boucler. Par ailleurs, la question a besoin d'un meilleur titre :)
current_company = Company.find(current_user.company_id)
has_answer = false
company_users = []
users_whom_answered = []
current_company.users.each {|u| company_users << u}
current_company.users.each do |user|
Survey.last.questions.each do |question|
question.answers.each do |answer|
if answer.user_id == user.id
has_answer = true
users_whom_answered << user
break
end
end
break if has_answer
end
end
result = company_users - users_whom_answered