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
Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top