Rails: Является ли одна таблица хорошим выбором для решения этой проблемы? - PullRequest
1 голос
/ 15 декабря 2010

Я только недавно унаследовал приложение на Rails и обсуждаю архитектурное решение в будущем.Вот немного предыстории ... Обратная связь приветствуется.

В настоящее время существует 16 различных типов объявлений, все с набором одинаковых атрибутов, несколько с одним или двумя дополнительными атрибутами и пара с тремя иличетыре.

В настоящее время каждый тип объявления имеет отдельную модель и таблицу с соответствующими столбцами, а также отдельный контроллер и представления в CMS, также используемые для базового CRUD.CMS использует в своих интересах атрибут наследованных_ресурсов, что ограничивает дублирование.

Я выписал набор атрибутов - их около 20, которые охватывают все типы объявлений.Определенные типы объявлений имеют ассоциации - несколько ассоциаций has_many, в которых внешний ключ хранится в связанной таблице, а несколько принадлежат__.

У объявлений нет реального поведения.Определенные типы объявлений просто отображаются на разных страницах, поэтому, пока я могу определить, есть ли реклама определенного типа, мы золотые.

Я спорю о переходе на одну модель, таблицу иконтроллера, но хочу получить как можно больше информации от сообщества stackoverflow о том, подходит ли это 1) хорошее решение проблемы 2) любые проблемы с производительностью 3) любые потенциальные узкие места в программировании, которых у меня нет.Вот мои мысли на данный момент ...


Предполагается, что маршрут /: location /: ad_type / new (например, / homepage / ad_type_1 / new):

ad_controller создаст @ad с ad_type, установленным в params [: location] + params [: ad_type], и ​​отображает новое представление, которое будет содержать серию условий для отображения соответствующих партиалов для данного ad_type.При отправке запускается действие создания, создающее объявление с ожидаемыми атрибутами, определенными для типа объявления, одним из которых в этом случае будет ad_type = homepage_ad_type_1.

Я не особо задумывался о получении данных, нопредполагая, что столбец ad_type установлен правильно, я смогу создать область действия «of_type», которая извлекает записи на основе столбца ad_type.Не уверен, что я что-то там упустил.

Проверки будут варьироваться в зависимости от значения ad_type.

Я не совсем уверен, сколько объявлений будет существовать в любой момент времени, но я чувствую,это может быть решено позже.Либо, переместив некоторые устаревшие строки в таблицу ad_archives, либо аналогично.

Ваши мысли ценятся.Спасибо.

1 Ответ

1 голос
/ 15 декабря 2010

Я бы, вероятно, использовал для этого модель одной таблицы, но если имеет смысл использовать несколько контроллеров / представлений, вам не нужно ограничивать себя одним контроллером, и вы все равно можете запрашивать объявления на основе их типа безиспользуя условные выражения.Пример:

create_table :people do |t|
  t.string first_name
  t.string last_name
  # some other properties...
  t.string type
end

class Student < Person
end

class Teacher < Person
end

Person.all # shows all students and teachers
Teacher.all # shows all teachers

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

...