Две модели классов - одна таблица базы данных - PullRequest
1 голос
/ 29 января 2010

Ты когда-нибудь делал это?

Я пишу приложение на Rails. У меня есть ситуация, когда у меня есть модель задачи (и таблица), у задачи есть атрибуты, люди, которым разрешено ее просматривать, и иерархия (это может быть проект или бизнес).

У меня также есть AssignmentController, который предоставляет некоторые представления и функциональные возможности лицу, назначенному для Задачи - AssignmentController использует Task.find для получения задачи и является тем же объектом, что и Задача - он просто обновляется Получателем только несколько столбцов доступны для цессионария. В этом случае я хотел скрыть некоторый пользовательский интерфейс, изменить макет, чтобы он соответствовал бизнесу, и иерархия не имела значения для получателя задачи.

То, о чем я думаю, - это создание модели Задачи и модели Назначения, которые обе указывают на одну и ту же таблицу (таблицу задач). Я не понимаю, почему я не должен этого делать. Это позволило бы мне уменьшить класс модели Assignment и изолировать методы, которые используются только в Task. насколько я могу судить, это также сделало бы большую часть кода чище.

Я не вижу много об этом шаблоне, когда я ищу в Интернете. Есть мнения по этому поводу?

Ценю ваши мысли ...

Ответы [ 2 ]

1 голос
/ 29 января 2010

Если я правильно понял, вы хотите подклассы таблиц :) Хорошая идея, не понимаю, почему это не сработает ... set_table_name "tasks" сделает это или просто создаст подкласс модели Task. Но в обоих случаях у вас возникнут проблемы с ассоциациями, вам нужно будет определить назначение assign_to: task и assign_to: для любой ассоциации has_many, если вы хотите сделать это правильно ...

Edit: На самом деле забудь, что я сказал :) http://railscasts.com/episodes/154-polymorphic-association

0 голосов
/ 29 января 2010

У вас должна быть таблица соединения между Assignee и Tasks. Ваше предложение приведет к тому, что ваши взгляды будут засорены, если у вас нет заявлений о погоде или нет у вас правопреемника или задачи. Если вы обнаружите, что вы используете похожие куски HTML между двумя, вы можете просто использовать партиалы.

Кроме того, ваше предложение несколько не поддается нормализации базы данных. Нормализация - это не только то, что вам нужно сегодня, но то, что вам может понадобиться завтра. Если у вас нет больше информации о правопреемнике, чем имя пользователя, возможно, будет хорошо иметь одну и ту же таблицу для обеих моделей (типа). Но что будет позже, когда вы захотите получить больше информации о назначенных лицах?

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