Вы можете использовать полиморфные ассоциации.
Добавьте внешний ключ и столбец типа в таблицу pages
. Найдите прилагательное, которое описывает общее свойство классов, к которым могут принадлежать ваши страницы. Я придумал pageable
(что дает мне столбцы pageable_id
и pageable_type
). Если вы используете миграцию, добавьте следующую вашу Page
миграцию:
# Adds "pageable_id" integer column and "pageable_type" string column.
t.references(:pageable, :polymorphic => true)
В ваших моделях укажите полиморфные отношения при использовании has_many
/ belongs_to
:
class Site < ActiveRecord::Base
has_many :pages, :as => :pageable
end
class Blog < ActiveRecord::Base
has_many :pages, :as => :pageable
end
class Page < ActiveRecord::Base
belongs_to :pageable, :polymorphic => true
end
И вот:
# Return all pages belonging to Site with ID 12, that is, return all pages
# with pageable_id 12 and pageable_type "site".
Site.find(12).pages
# Return all pages belonging to Blog with ID 3, that is, return all pages
# with pageable_id 3 and pageable_type "blog".
Blog.find(3).pages
# Returns the owner (Blog or Site) of Page with ID 27.
Page.find(27).pageable
Надеюсь, это поможет.