Pregunta

He conseguido los usuarios que son miembros de grupos a través de una tabla de unión de miembros, y uno de los atributos de esa tabla de unión es "administrador". Estoy tratando de hacer una verificación en el interior de vista del miembro de un grupo, de enlace a través de cada miembro para ver si son un administrador.

En la vista He intentado lo siguiente:

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

I también intentado esto en el controlador:

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

Pero no hubo suerte. ¿Alguna idea?

actualización - por debajo, poner un método en el modelo de usuario:

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

Solución

A pesar de que creo que se podría asociaciones de configuración de lograr esto creo que la forma más fácil de hacerlo sería añadir un método a su modelo de usuario que le permite comprobar para cada usuario (esta manera que encajaría en el bucle que tiene previsto). No sé si va a caer bien, puede tardar unos cambios rápidos pero se puede comenzar con algo como:

  

Modelo de usuarios

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

Otros consejos

Creo que esta sería una forma más limpia de hacer esto

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

Ahora tiene una lista group.admins

for user in @group.admins
    ...DO STUFF
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top