基本グループ モデル:
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
名前空間モデル:
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
*after_initialize* コールバックで *item_type* フィールドを設定しようとしていますが、何をしても、コールバックは通常のグループ モデルでのみトリガーされ、名前空間モデルではトリガーされません。
これが予想される動作である理由と、名前空間が設定されたGroupに対してコールバックを機能させる方法を理解するのに苦労しています。