Zugriff auf Werte in einem has_many: Werden Sie Mitglied in Tabelle
-
20-09-2019 - |
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
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 tunclass 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