Основная группа Модель:Rails Namespaced модель не вызывает Callbacks
class Group < ActiveRecord::Base
@@ItemType = 'GroupItem' # Base ItemType
after_initialize :default_item_type
has_many :group_assignments
has_many :items, through: :group_assignments, source: :groupable, source_type: @@ItemType, dependent: :destroy
accepts_nested_attributes_for :items, allow_destroy: true
private
def default_item_type
self.item_type = @@ItemType if self.new_record?
end
end
Namespaced Модель:
class Gradation::Group < Group
@@ItemType = 'Gradation' # Base ItemType
after_initialize :default_item_type
has_many :group_assignments
has_many :items, through: :group_assignments, source: :groupable, source_type: @@ItemType, dependent: :destroy
accepts_nested_attributes_for :items, allow_destroy: true
private
def default_item_type
self.item_type = @@ItemType if self.new_record?
end
end
Я пытаюсь иметь поле * item_type * быть установлен на * after_initialize * обратного вызова, но неважно, что я делаю, обратный вызов запускается только по обычной групповой модели, а не по имени.
Я боюсь понять, почему это ожидаемое поведение, а также как получить обратные вызовы для работы с именами Группа.
Возможно, это странно, но вы можете изменить 'private' на' protected'?Если я хорошо помню, частные методы могут использоваться только Model, а защищенные методы могут использоваться моделью и ее унаследованными классами. Кроме того, callback 'after_initialize' будет называться много раз! Он будет вызываться каждый раз, когда вы будете получать запись. Если вы хотите установить значение по умолчанию на этапе создания записи, вместо этого используйте 'before_create';) – MrYoshiji