Создать уведомления с актером в качестве приложения - PullRequest
0 голосов
/ 26 апреля 2020

С моделью Notification как бы вы смоделировали отношение Отправитель / Актер, чтобы разрешить системные уведомления, где приложение является отправителем? т. е. «Ваш экспорт завершен» или «Ваша пробная версия подходит к концу».

Ниже приведено объяснение некоторых полей для вышеуказанной модели:

recipient_id: представляет пользователь в вашем приложении, которое получит уведомление.

actor_id: представляет пользователя в вашем приложении, которое вызвало уведомление.

read_at: время, когда уведомление было прочитано. Значение nil используется для непрочитанных уведомлений.

notifiable_id: объект, представляющий это уведомление (сообщение, комментарий и т. Д. c). Это будет полиморфная c ассоциация.

notifiable_type: тип объекта, подлежащего уведомлению. Обычно это представляется гуманизированной (и, необязательно, интернационализированной) строковой формой класса объекта.

Моей первой мыслью было сделать Actor (способный) polymorphi c, но это не разрешить для DEFAULT_APPLICATION, который ссылается на приложение, потому что он не находится в базе данных и, следовательно, не ссылаться. Продолжая идею создания Actor polymorphi c, актер может быть @export и current_user.subscription соответственно. Третий вариант - смоделировать Notification, чтобы учесть nil Актера, и оставить актера nil.

# Your export completed. Download your export.
# Your trial is ending soon. Update your payment information.
Notification.create(recipient: current_user, actor: ?, action: "completed", notifiable: @export)
Notification.create(recipient: current_user, actor: ?, action: "ending", notifiable: current_user.subscription)

# Polymorphic Actor
Notification.create(recipient: current_user, actor: @export, action: "completed", notifiable: @export)
Notification.create(recipient: current_user, actor: current_user.subscription, action: "ending", notifiable: current_user.subscription)

# nil
Notification.create(recipient: current_user, actor: nil, action: "completed", notifiable: @export)
Notification.create(recipient: current_user, actor: nil, action: "ending", notifiable: current_user.subscription)
.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...