Описание
На этой неделе я работал над завершением интеграции Noticed в CircuitVerse, это была одна из самых сложных и самых продуктивных недель, поскольку я получил новые знания:
- Эффективное использование консоли Rails.
- ActiveRecords .
- Миграция.
- Контроллеры.
- Представления rails.
На последней встрече я показал менторам демонстрацию функциональности уведомлений, и они сказали, что есть небольшие изменения в UI и миграция старых данных Activity Notification.
Я выполнил задание по вспомогательным методам, UI и некоторой очистке. Но самой сложной задачей для меня была миграция данных из одной таблицы в другую таблицу с различными конфигурациями. Aboobacker поделился файлом миграции, который содержит SQL
запрос для миграции, но это было сравнительно проще, чем то, что мне нужно было сделать в этой задаче!
Поэтому я придумал множество решений для отображения старых уведомлений:
-
Я подумал, что мы можем просто добавить фильтр
before_action
с методомload_old_notifications
дляuser
. Поэтому я создаю новый столбец в таблицеold_notification
под названиемmigrated
со значением по умолчаниюfalse
, поэтому всякий раз, когда пользователь входит в систему,load_old_notifications
будет запускаться и проверять вold_notification
, если полеmigrated
равноfalse
, он создаст новые данные для таблицыnotification
и пометитmigrated
какtrue
в таблицеold_notification
. -
Но я нахожу это очень сложным, так как мы думаем удалить
ActivityNotification
gem и при миграции есть метод модели, необходимый для получения пути к уведомлению, поэтому я отбрасываю это решение и перехожу к следующему и следующему, я потерпел неудачу и, наконец, пришел к решению использоватьActiveRecords
вmigration
(это сработало, но не предпочтительно), вот как выглядит мой файл миграции:
class PopulateNotificationData < ActiveRecord::Migration[7.0]
include ActivityNotification
def change
Notification.find_each do |data|
newnotification = NoticedNotification.first_or_initialize(
:recipient_type => data.target_type,
:recipient_id => data.target_id,
:type => "PreviousNotification",
:params => {
user_id: data.notifier_id,
path: data.notifiable_path,
message: data.notifiable.printable_notifiable_name(data.target),
type: data.notifiable_type
},
:read_at => data.opened_at
)
newnotification.save!
end
end
end
Мне нужно изменить это в SQL запросе.
Это заняло у меня около 4 дней, но оно того стоило, я многому научился на ошибках.
За эти 2 недели я также :
- Сдал промежуточную аттестацию
- Опубликовал свой первый блог на CircuitVerse/Blog о первом этапе GSoC.
- Посетил свой первый оффлайн хакатон и познакомился с удивительными людьми.
План на следующую неделю:
- Завершить тестовые примеры спецификаций
- Завершить миграцию
- Начать работу над
push notification
в мобильном приложении.