2011-03-11 19 views
19

¿Hay alguna forma de agregar devoluciones de llamada cuando se agrega un elemento a una relación habtm?Rails habtm callbacks

Por ejemplo, tengo los dos modelos siguientes, User y Role:

# user.rb 
class User; has_and_belongs_to_many :roles; end 

 

# role.rb 
class Role; has_and_belongs_to_many :users; end 

quiero añadir una devolución de llamada a la << método (@user << @role), pero no puedo Parece que no se encuentra una devolución de llamada de ActiveRecord porque no hay un modelo para la tabla de unión (porque es un habtm verdadero).

Soy consciente de que podría escribir un método como add_to_role(role), y definir todo lo que hay allí, pero preferiría usar una devolución de llamada. es posible?

Respuesta

30

Sí hay:

class User < AR::Base 
    has_and_belongs_to_many :roles, 
    :after_add => :tweet_promotion, 
    :after_remove => :drink_self_stupid 

private 

    def tweet_promotion 
    # ... 
    end 

    def drink_self_stupid 
    # ... 
    end 
end 

Busque 'devoluciones de llamada Asociación' en esta página para más: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

+0

qué importa de qué lado de la relación agrego la devolución de llamada, o es ¿¿lo mismo?? – zeacuss

+0

Acabo de probar esto con Rails 3.2.8 y lamentablemente importó, de qué lado agrega esas devoluciones de llamada. ¿Cuál es tu experiencia? –

Cuestiones relacionadas