У меня есть модифицированная версия prototypical polymorphic modelПолиморфные ассоциации по умолчанию не работают?
class Picture < ActiveRecord::Base
belongs_to :imageable, polymorphic: true
before_save :default_value
private
def default_value
Rails.logger.debug("*** Setting default value ***")
# Set default values here
end
end
class Employee < ActiveRecord::Base
has_many :pictures, as: :imageable
end
class Product < ActiveRecord::Base
has_many :pictures, as: :imageable
end
Здесь я попытался установить значения по умолчанию для Picture
модели, так как suggested in an answer to a similar question.
Проблема заключается в том, что метод default_value
не вызывается, когда Employee
или Product
сохраняется.
Я могу подтвердить, что дб настроен правильно, потому что я побежал это в рельсах консоли:
emp = Employee.create() # Creating Employee.id == 1
emp.pictures.count # == 0
Picture.create(imageable_id: 1, imageable_type: "Employee") # Here, setting defaults works fine
Employee.find(1).pictures.count # == 1
Так что вопрос: почему не default_value
дозвонились, когда я сохранить Employee
или Product
?
Что вы подразумеваете под "сохранить «Сотрудник» или «Продукт»? Исходя из вашего примера, я не вижу причин, по которым эти два класса наследуют методы из «Picture». Что вы хотите сделать? – ptd
Спасибо за ваш комментарий ptd! Меня просто озарило, что я надеюсь, что эта установка должна вести себя скорее как «наследование», но, как я написал в комментарии к принятому ответу, теперь я понимаю, почему он не может делать то, что я этого хотел. – conciliator