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
È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top