Должен ли я использовать has_one или assign_to в ruby ​​на рельсах? - PullRequest
8 голосов
/ 10 июля 2010

Я хочу иметь модель Status, которая будет относительно статичной после некоторой пользовательской настройки (и у разных пользователей могут быть разные значения в состоянии).

Статус может применяться к различным моделям,такие как Contact и Event.

, поэтому статусы, возвращаемые contact.status, будут отличаться от event.status

Я хочу спроектировать приложение так, чтобы таблица состояния имела разные типы(contacts и events).

Какова правильная стратегия и формат для этого?

Я думаю об объявлении :has_one Status в модели Contact и сохранении:status_id в таблице :contacts.То же самое с таблицей Event.

:statuses будет иметь значение состояния, тип и дату.

имеет ли это смысл?Можете ли вы предложить лучший подход?

Ответы [ 3 ]

9 голосов
/ 10 июля 2010

Существует руководство по этому самому вопросу.Ваша ситуация немного отличается в том смысле, что кажется, что ваша модель Status действительно должна быть полиморфной, поскольку разные вещи будут «статусными».

Чтобы ответить на ваш вопрос, Contact / Event has_one Status для меня имеет смысл.

2 голосов
/ 15 ноября 2013

Просто чтобы завершить ответ в более общей обстановке, которая может повлиять на ваш выбор: belongs_to ассоциация используется в модели, имеющей внешний ключ.

1 голос
/ 10 июля 2010

Во-первых, отношение has_one не хранит идентификатор в текущей модели.Он ищет внешний ключ в соответствующей таблице.Для того, чтобы сохранить status_id в Контактах или Событиях, вы должны использовать own_to.

Во-вторых, в зависимости от типа информации, которую вы храните в Status, зачем нужна отдельная таблица?Почему бы не создать столбец состояния в каждой модели, для которой вы хотите использовать статус?Немного больше информации может быть полезно здесь.

...