【发布时间】:2016-10-04 16:19:52
【问题描述】:
问题:
如何告诉 ActiveRecord 在存储/查询关联类型列时不包含关联类的命名空间?
现状:
考虑以下类定义:
class PageTemplateA < ActiveRecord::Base
has_many :type_a_pages, :as => :pageable, :class_name => 'TypeAPage', :inverse_of => :pageable
end
##### The following class is implemented through STI.
class TypeAPage < Page
belongs_to :pageable, :class_name => 'PageTemplateA', :inverse_of => :type_a_page
end
class Page < ActiveRecord::Base
belongs_to :pageable, :polymorphic => true
end
总结一下:
-
TypeAPage是通过数据库表中的STI实现的,pages。 -
TypeAPage通过多态关联与PageTemplateA关联(pages.pageable_type在与PageTemplateA关联时为PageTemplateA)
我想做的改变:
我想将上述所有模型移动到一个新的命名空间中,比如PagesEngine,所以我对PageTemplateA 的定义如下:
module PagesEngine
class PageTemplateA < ActiveRecord::Base
has_many :type_a_pages, :as => :pageable, :class_name => 'TypeAPage', :inverse_of => :pageable
end
end
这很好用,除了 ActiveRecord 将TypeAPage 的pageable_type 推断为PagesEngine::PageTemplateA。
如何告诉 ActiveRecord 不包含命名空间,并将 pageable_type 解析为 PageTemplateA 而不是 PagesEngine::PageTemplateA?
【问题讨论】:
标签: ruby-on-rails activerecord