Наследование ActiveRecord с различными таблицами базы данных - PullRequest
3 голосов
/ 25 апреля 2009

Я только начал исследовать использование более продвинутых моделей в Rails. Одна из тех, которые я регулярно использую с большим успехом, - это модель, в которой отношение перекрестных ссылок «многие ко многим» доступно классу, который сам является подклассом базового класса в отношении «многие ко многим».

Таким образом, класс перекрестных ссылок может выступать в качестве замены для базового класса.

Хороший пример - это когда узел иерархии навигации (NavigationNode) имеет перекрестную ссылку на роль пользователя. В точке перекрестной ссылки класс (RoleNavigationNode) может наследоваться от NavigationNode и при этом иметь глубокие знания роли пользователя.

Мой вопрос (в случае выше) может RoleNavigationNode наследовать от NavigationNode и при этом обращаться к таблице перекрестных ссылок, а не к той, к которой обращается NavigationNode - это, конечно, с помощью ActiveRecord.

Я не исследовал полиморфную ассоциацию, которая может быть более подходящей.

Заранее спасибо ...,

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Это работает в Rails 3:

class Common < ActiveRecord::Base
  @abstract_class = true
  def common
    "Foobar!"
  end
end

class Model < Common
end

class AnotherModel < Common
end

Без установки abstract_class Rails будет искать таблицу с именем commons в вашей базе данных.

2 голосов
/ 01 мая 2009

пробовал set_table_name на подклассе?

Также посмотрите на настройку @abstract_class в модельных классах.

Наконец, то, что вам нужно, это просто Mixin, который вы включаете в обе модели.

В любом случае, то, что вы пытаетесь сделать, звучит довольно не-ActiveRecord-ish. Возможно, вы захотите опубликовать более четкий пример того, чего вы пытаетесь достичь, возможно, мы сможем придумать что-нибудь попроще.

...