たとえば
app/model/article/tag.rb
class Article::Tag < ::Tag
self.table_name = 'article_tags'
has_many :taggings, :dependent => :destroy, :class_name => 'Article::Tagging'
end
app/model/article/tagging.rb
class Article::Tagging < ::Tagging
self.table_name = 'article_taggings'
belongs_to :tag, :class_name => 'Article::Tag'
end
でも、うまくテーブル名の指定が効かなかった。(Rails 3.2.13)
irb(main):001:0> Article:Tag.new
ActiveRecord::StatementInvalid: Could not find table 'tags'
ググってみると
ActiveRecord Inheritance without STI?
というわけで、親クラスを抽象クラスにすることで動いた。
config/initializers/taggable.rb
Tag.module_eval do
self.abstract_class = true
end
Tagging.module_eval do
self.abstract_class = true
end
irb(main):001:0> Article:Tag.new
=> #<Article::Tag id: nil, name: nil>