Поле базы данных типа Rails - PullRequest
2 голосов
/ 02 декабря 2011

У меня есть таблица под названием Уведомление.В этой таблице есть следующие поля : id,: user_id,: foreign_id,: type

Я хочу связать уведомления с другими таблицами, такими как Friend, Quiz, Sport, Trip, используя поле внешнего ключа: foreign_id , так что я могу хранить различные типы уведомлений в общем виде.Я хотел бы хранить уведомления какого типа в столбце базы данных: type, например "Friend" или "Quiz" и т. Д.

Каков наилучший способ добиться чего-то подобного в Rails?

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011

Я думаю, то, что вы ищете, называется Полиморфные ассоциации

1 голос
/ 02 декабря 2011

Вы можете сохранить имя класса связанного объекта в виде строки в поле object_type (или как вы его называете), которое позволяет вам извлекать связанный объект следующим образом:

# create new notification for quiz
Notification.create(user_id: user.id, foreign_id: quiz.id, object_type: quiz.class.to_s)

# load associated object for notification
associated_object = notification.object_type.constantize.find(notification.foreign_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...