Estoy un poco confundido acerca de cómo funciona esto, incluso si funciona correctamente. Tengo un modelo que tiene dos asociaciones con el mismo otro modelo.has_one y has_many en el mismo modelo. ¿Cómo los raíles los rastrean?
La empresa tiene un propietario y la empresa tiene muchos empleados de los usuarios de la clase.
aquí es mi modelo de empresa:
class Company < ActiveRecord::Base
validates_presence_of :name
has_many :employee, :class_name => 'User'
has_one :owner, :class_name => 'User'
accepts_nested_attributes_for :owner, :allow_destroy => true
end
aquí es mi modelo de usuario:
class User < ActiveRecord::Base
include Clearance::User
attr_accessible :lastname, :firstname #other attr are whitelisted in clearance gem
validates_presence_of :lastname, :firstname
belongs_to :company
end
Ahora suponiendo que tengo 3 empleados de esta compañía, incluyendo el propietario. Cuando creo por primera vez la empresa, configuro el propietario para el empleado con id 1 y los otros dos (2,3) se agregan a la lista de empleados al establecer su company_id (user.company = company). Los tres tienen su id_compañía establecida en el id. De la compañía, que podemos suponer que es 1
cuando solicito company.owner, obtengo el usuario correcto y cuando hago compañía. Empleado, obtengo los tres.
Si cambio el propietario al usuario 2, el usuario 1 se elimina automáticamente de los empleados al establecer su company_id en cero. Esto está bien y si lo vuelvo a agregar como un simple empleado, todo sigue siendo bueno.
¿Cómo sabe el rayo cuál es cuál? Lo que quiero decir es ¿cómo sabe que un empleado es dueño y no solo un empleado? Nada en el esquema define esto.
Tengo la sensación de que debería invertir la asociación de propietarios y hacer que la empresa pertenezca a un usuario.
Terminé haciendo esto y en el lado del usuario, hice belongs_to: employer,: class_name => "Company", que tenía que hacer para evitar un conflicto con user.company, ahora user.company es la empresa y la empresa de su propiedad .employer es ... entiendes el punto: P – nkassis