Accesso ai valori di una has_many: attraverso unirsi a tavola
-
20-09-2019 - |
Domanda
Non ho ottenuto gli utenti che sono membri di gruppi attraverso un abbonamento unirsi tavolo, e uno degli attributi di quel tavolo join è "amministratore". Sto cercando di fare un controllo all'interno di vista membro di un gruppo, scorrendo ogni membro per vedere se sono un amministratore.
Nella vista ho provato quanto segue:
for user in @group.users
if user.administrator?
...DO STUFF
end
end
Ho provato anche questo nel controller:
@administrators = @group.memberships.find(:all, :conditions => ["administrator = 1"])
, ma senza fortuna. Ogni pensiero?
UPDATE - per di sotto, mettere un metodo nel modello utente:
def is_administrator_of(group_id)
Membership.find(:first, :conditions => ['user_id = ? AND group_id = ? AND administrator = ?', self[:id], group_id, true])
end
Soluzione
Anche se credo che si possa associazioni di impostazione per raggiungere questo penso che il modo più semplice per farlo sarebbe quello di aggiungere un metodo al modello d'uso che permette di controllare per ogni utente (in questo modo si adatterebbe nel ciclo si ha fornito). Non so se sarà cadere a destra, può richiedere alcuni cambiamenti rapidi, ma si potrebbe iniziare con qualcosa di simile:
Modello utente
def is_administrator_of(group_id)
Membership.find(:first, :conditions => ['user_id = ? AND group_id = ?', self[:id], group_id]).administrator == 1
end
Altri suggerimenti
Credo che questo sarebbe un modo più pulito per fare questo
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
has_many :admins, :through => :memberships, :source => :user,
:conditions => ['memberships.administrator = ?', true]
end
Ora avete una lista group.admins
for user in @group.admins
...DO STUFF
end