Accès aux valeurs dans un has_many: rejoignez par la table
-
20-09-2019 - |
Question
J'ai utilisateurs qui sont membres obtenu des groupes par le biais d'une table de jointure membres, et l'un des attributs de cette table de jointure est « administrateur ». Je suis en train de faire une vérification à l'intérieur de la vue des membres d'un groupe, une boucle à travers chaque membre pour voir si elles sont un administrateur.
De l'avis j'ai essayé les éléments suivants:
for user in @group.users
if user.administrator?
...DO STUFF
end
end
J'ai aussi essayé ceci dans le contrôleur:
@administrators = @group.memberships.find(:all, :conditions => ["administrator = 1"])
Mais pas de chance. Toute pensée?
NOUVELLES - par-dessous, un procédé mis dans le modèle de l'utilisateur:
def is_administrator_of(group_id)
Membership.find(:first, :conditions => ['user_id = ? AND group_id = ? AND administrator = ?', self[:id], group_id, true])
end
La solution
Bien que je pense que vous pouvez les associations de configuration pour accomplir cela, je pense que la meilleure façon de faire serait d'ajouter une méthode à votre modèle d'utilisateur qui vous permet de vérifier pour chaque utilisateur (cette façon, il cadrerait dans la boucle que vous avez à condition de). Je ne sais pas si elle baissera à droite, il peut prendre quelques changements rapides mais vous pouvez commencer par quelque chose comme:
Modèle utilisateur
def is_administrator_of(group_id)
Membership.find(:first, :conditions => ['user_id = ? AND group_id = ?', self[:id], group_id]).administrator == 1
end
Autres conseils
Je pense que ce serait un moyen plus propre de le faire
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
has_many :admins, :through => :memberships, :source => :user,
:conditions => ['memberships.administrator = ?', true]
end
Vous avez maintenant une liste de group.admins
for user in @group.admins
...DO STUFF
end