2009-03-11 13 views
5

Tengo una pregunta sobre las asociaciones en Ruby on Rails. En la aplicación hay proyectos, usuarios, roles y grupos. El proyecto pertenece a un grupo con usuarios, un usuario puede pertenecer a muchos grupos diferentes, pero solo puede tener un rol específico dentro de ese grupo. Por ejemplo:Triple unión en Ruby on Rails

En un grupo, el usuario es el propietario del proyecto, pero en otro grupo es escritor.

¿Cuál es la mejor manera de implementar esto usando las funciones incorporadas en Rails?

Gracias

Respuesta

8

Aquí es un conjunto muy rápido de los modelos que deben cumplir con sus requerimientos:

class User < ActiveRecord::Base 
    has_many :group_memberships 
    has_many :groups, :through => :group_memberships 
end 

class GroupMembership < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :role 
    belongs_to :group 
end 

class Role < ActiveRecord::Base 
    has_many :group_memberships 
end 

class Group < ActiveRecord::Base 
    has_many :group_memberships 
    has_many :users, :through > :group_memberships 
end 

Básicamente hay una tabla de unión que tiene un usuario, grupo y el ID de función en ella. Dejaré las migraciones como un ejercicio para el interrogador