Обновлено
Кажется, что это ошибка приоритета и не имеет ничего общего с вопросом, который я изначально задавал. Смотрите обсуждение ниже.
Оригинальный вопрос
Можно ли использовать активные ассоциации записей в обратных вызовах? Я проверил этот код в консоли, и он работает нормально, пока он не находится в обратном вызове. Я пытаюсь создать обратные вызовы, которые извлекают атрибуты из других связанных моделей, и я получаю ошибки nil.attribute.
Если обратные вызовы не являются правильным подходом, как можно сделать подобное действие в рельсах? Если ассоциации просты, вы можете использовать create_association (attribute =>), но, поскольку ассоциации становятся более сложными, это начинает становиться грязным.
Например ...
class User < ActiveRecord::Base
belongs_to :b
before_validation_on_create {|user| user.create_b} #note, other logic prevents creating multiple b
end
class B < ActiveRecord::Base
has_many :users, :dependent => destroy
after_create{ |b| b.create_c }
has_one :c
end
class C < ActiveRecord::Base
belongs_to :b
after_create :create_alert_email
private
def create_alert_email
self.alert_email = User.find_by_b_id(self.b_id).email #error, looks for nil.email
end
end