2012-06-15 14 views
8

Actualmente tengo dos modelos diferentes: User y Project. El modelo User tiene tres tipos de usuarios: propietarios, contratistas y clientes. Quiero asignar múltiples contratistas a un proyecto. Estoy tratando esto con una asociación has_many :through, así:Rails has_many: a través de diferentes nombres de columna en la tabla de asociación

Class User 
    has_many :assignments 
    has_many :projects, :through => :assignments 

Class Project 
    has_many :assignments 
    has_many :contractors, :through => :assignments 

Class Assignment 
    belongs_to :user 
    belongs_to :project 

Mi problema es en el uso de contractor_id en la tabla assignments en lugar de user_id.

En mi tabla assignments actualmente tengo las columnas contractor_id y project_id. Todo parece funcionar si utilizo user_id en su lugar, pero eso hará que las cosas sean bastante complicadas más adelante en mis puntos de vista.

¿Cómo puedo lograr esto?

Respuesta

14

Se debe utilizar la opción :foreign_key en Assignment, por ejemplo:

class Assignment 
    belongs_to :user, :foreign_key => :contractor_id 
    belongs_to :project 
+0

Esto definitivamente funciona el único camino, ahora sólo tiene que conseguir el modelo de usuario para reconocer el 'contractor_id' en lugar de' user_id' cuando llame a '@ user.projects' –

+2

. Modelo de usuario necesario: foreign_key =>: contractor_id en has_many: asignaciones –

Cuestiones relacionadas