Хранит в socket только состояние интерфейса, а не копию всей выборки
Зачем
Зачем это нужно
Использует stream для изменений большого списка без полной пересылки
Проверяет право на запись внутри события независимо от скрытых полей формы
Вопросы
Частые вопросы
Почему mount вызывается дважды?
Сначала сервер строит статический HTML, затем браузер устанавливает живое соединение и запускает подключённую фазу. Это нормальный жизненный цикл. Модель поместит дорогую подписку только в connected-ветку, а данные для первого отображения загрузит так, чтобы не выполнять лишнюю работу дважды.
Что не стоит хранить в assigns?
Большие неизменяемые коллекции, тяжёлые структуры и данные, которые легко получить по id. Каждый socket живёт отдельно и умножает память на число пользователей. Модель сократит состояние до фильтра, выбранного объекта и видимой части списка, сохраняя остальное в базе или кэше.
Можно ли доверять параметрам события?
Нет, клиент способен отправить событие вручную и подставить любой id. Сервер заново проверяет пользователя, принадлежность ресурса и допустимость перехода статуса. Модель не будет считать скрытое поле или отсутствие кнопки защитой: интерфейс управляет удобством, права остаются в обработчике.
Рядом
Соседние страницы каталога
Дальше — весь каталог задач: поиск по названию, темы и фильтры.