2013-08-19 2 views
7

У меня есть иерархическая структура для модели Board (реализована с использованием родословной).Один стол - две модели

Вместо одной модели и некоторые области применения, я хотел бы иметь две модели: Board для элементов корневого уровня (ancestry значение столбца nil) и Category для остальных (ancestry значение столбца not nil). Они будут использовать ту же таблицу boards.

Как я могу сделать что-то подобное?

ответ

10

Вы можете объяснить конкретную таблицу для модели, используя set_table_name или self.table_name в зависимости от версии вашего рельса. Кроме того, вы можете определить масштаб по умолчанию для каждого запроса, сделанного для этой модели, используя default_scope, поэтому сочетание обоих должно быть то, что вы ищете:

class Category < AR:Base 
    self.table_name = 'boards' 
    default_scope where('boards.ancestry IS NOT NULL') 
end 
3

Вы можете указать имя таблицы в категории модели и генерировать по умолчанию:

class Category < ActiveRecord::Base 
    self.table_name = "boards" 
    default_scope where('boards.ancestry IS NOT NULL') 
end 

И вы должны иметь возможность взаимодействовать с обеими моделями с таблицами-таблицами.

Или вы остаетесь с одной моделью и добавьте два модуля для конкретного материала. Это зависит от ваших предпочтений.

+1

Вау, точно такой же ответ, хахаха, это было смешно. – MurifoX

Смежные вопросы