Frage

Ich habe Benutzer bekam, die Mitglieder der Gruppen durch eine Mitgliedschaft Join-Tabelle sind, und eines der Attribute dieser Join-Tabelle ist „Administrator“. Ich versuche, einen Scheck innerhalb eines Gruppen-Mitglied zu tun, durch jedes Mitglied Looping, um zu sehen, ob sie ein Administrator sind.

In der Ansicht habe ich versucht, die folgenden:

for user in @group.users
  if user.administrator?
    ...DO STUFF
  end
end

Ich habe auch versucht, diese in der Steuerung:

@administrators = @group.memberships.find(:all, :conditions => ["administrator = 1"])

Aber kein Glück. Irgendwelche Gedanken?

UPDATE - unten pro, legt ein Verfahren in das Benutzermodell:

def is_administrator_of(group_id)
        Membership.find(:first, :conditions => ['user_id = ? AND group_id = ? AND administrator = ?', self[:id], group_id, true])
end
War es hilfreich?

Lösung

Obwohl ich glaube, könnten Sie Setup-Verbände dies zu tun Ich denke, die einfachste Weg, es zu tun wäre, ein Verfahren zu Ihrem User-Modell hinzufügen, die Sie für jeden Benutzer (diese Möglichkeit zu überprüfen, erlaubt es in der Schleife passen würden Sie unter der Voraussetzung). Ich weiß nicht, ob es richtig fallen lassen wird, ein paar schnellen Änderungen in Anspruch nehmen, aber man könnte mit so etwas wie starten:

  

Benutzermodell

def is_administrator_of(group_id)
    Membership.find(:first, :conditions => ['user_id = ? AND group_id = ?', self[:id], group_id]).administrator == 1
end

Andere Tipps

ich denke, das ein sauberer Weg wäre, diese

zu tun
class Group < ActiveRecord::Base
  has_many :memberships
  has_many :users, :through => :memberships
  has_many :admins, :through => :memberships, :source => :user,
           :conditions => ['memberships.administrator = ?', true] 
end

Sie haben nun eine group.admins Liste

for user in @group.admins
    ...DO STUFF
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top