Pergunta

Eu tenho usuários que são membros de grupos por meio de uma tabela de ingressos para associação, e um dos atributos dessa tabela de junção é "Administrador". Estou tentando fazer uma verificação dentro da visualização de um membro de um grupo, percorrendo cada membro para ver se eles são um administrador.

Na visão, tentei o seguinte:

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

Eu também tentei isso no controlador:

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

Mas sem sorte. Alguma ideia?

Atualização - Per abaixo, coloque um método no modelo de usuário:

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

Solução

Embora eu ache que você possa configurar associações para realizar isso, acho que a maneira mais fácil de fazer seria adicionar um método ao seu modelo de usuário que permite que você verifique cada usuário (dessa maneira ele caberia no loop que você forneceu). Não sei se isso vai cair certo, pode fazer algumas mudanças rápidas, mas você pode começar com algo como:

Modelo de usuário

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

Outras dicas

Eu acho que essa seria uma maneira mais limpa de fazer isso

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

Agora você tem uma lista de admins

for user in @group.admins
    ...DO STUFF
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top