Rails habtm callbacks - PullRequest
       6

Rails habtm callbacks

21 голосов
/ 11 марта 2011

Есть ли способ добавить обратные вызовы, когда элемент добавляется в отношение habtm?

Например, у меня есть следующие две модели, User и Role:

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

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

Я хочу добавить обратный вызов к методу << (@user << @role), но не могу найти обратный вызов ActiveRecord, потому что нет модели для объединениястол (потому что это настоящий habtm).

Я знаю, что мог бы написать метод, подобный add_to_role(role), и определить там все, но я бы предпочел использовать обратный вызов.Это возможно?

1 Ответ

33 голосов
/ 11 марта 2011

Да, есть:

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

Смотрите 'Обратные вызовы ассоциации' на этой странице для получения дополнительной информации: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

...