как я могу иметь 2 ресурса совместно использовать контроллер в рельсах - PullRequest
0 голосов
/ 12 января 2011

Я унаследовал проект Rails и борюсь с тем, как справиться с определенной ситуацией

Допустим, у меня есть 2 таблицы классов / дБ:

vinyl records
compact discs

Каждый элемент в каждой таблице имеет свой собственный идентификатор элемента И уникальный глобальный идентификатор

пример:

vinyl a -- vinyl.1 guid.100
vinyl b -- vinyl.2 guid.200
cd a    -- cd.1 guid.300
cd b    -- cd.2 guid.400

это позволяет мне иметь хорошие релаксирующие URL, такие как:

/vinyls/1
/cds/1

к сожалению, мы не хотим, чтобы это была структура URL. структура должна быть

/recordings/100
/recordings/300

Мне трудно понять, как все это объединить.

моя первая попытка заставила меня сделать следующее:

  1. труба все через контроллер cds
  2. попробуйте найти компакт-диск, если я не смогу - попробуйте найти винил
  3. если я найду винил, сделай рендеринг винила / покажи

это почти хорошо работает - проблема в том, что наши частичные функции сильно зависят от "ресурса", и я не могу понять, как изменить это для представлений.

У кого-нибудь есть рекомендации, как поступить? Я открыт для всего.

Ответы [ 2 ]

2 голосов
/ 12 января 2011

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

Если CD и Vinyl имеют довольно похожие столбцы, вы можете попробовать Single Table Inheritance.См. Раздел «Наследование отдельных таблиц» на этой странице: http://api.rubyonrails.org/classes/ActiveRecord/Base.html

Хотя я не уверен, в чем заключается ваша проблема с представлениями;Вы можете объяснить это немного больше?

1 голос
/ 12 января 2011

Проблема в том, что здесь две таблицы. Я бы предложил перенести базу данных для использования наследования отдельных таблиц, если у вас есть таблица recordings и классы Vinyl и Cd, которые наследуются от Recording. Тогда у вас может быть файл recordss_controller.rb и дополнительные контроллеры для каждого из двух типов. Вам нужно будет добавить столбец type, чтобы получить магию STI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...