Вот фрагмент кода, куда я хочу добавить дополнительную валидацию
(упрощённый код и сценарий использования)
# предотвратить изменение категории темы пользователями без прав персонала
PostRevisor.track_topic_field(:category_id) do |tc, category_id|
if tc.guardian.is_staff?
tc.record_change('category_id', tc.topic.category_id, category_id)
tc.topic.category_id = category_id
else
tc.topic.errors[:base] << "вы не можете изменить категорию для этого типа темы"
end
end
Этот код предотвращает изменение категории пользователями без прав персонала, но не выводит ошибку.
Ты лучше разбираешься в этом, чем я, но мне кажется, что Rails не должен пробрасывать это обратно, поскольку ожидается, что Ember не позволит пользователю выбрать категорию, которую он не должен выбирать. Так что, возможно, стоит убедиться, что фронтенд не даст им изменить категорию, если они не должны этого делать, чтобы PostRevisor никогда не сталкивался с этой неловкой ситуацией?
Хорошей практикой считается сначала ограничивать доступ на уровне API, а затем уже на фронтенде, если это возможно. То есть никогда не следует полагаться только на фронтенд для предотвращения недопустимых действий.
Кроме того, фронтенд должен передавать ошибки Active Record.
Поэтому выполнение этой проверки на уровне API крайне важно.
Я думал, что понял: система обеспечивает соблюдение требования и отказывается вносить изменения, но просто не предоставляет фронтенду достаточно подробную ошибку.
Я лишь пытаюсь предотвратить изменение категории, поэтому интерфейс в данном случае довольно неудобен, так как он позволяет изменять все метаданные сразу или ничего не менять.
Поэтому всплывающая ошибка была бы очень кстати.
Жесткость шаблонов .gjs делает такие изменения сейчас очень сложными.
Этот шаблон всё ещё HBS, но я не хочу его переопределять по очевидным причинам.
Опять же, ты в этом лучше меня, но я думал, что можно скрыть селектор категорий похоже, это не сработает.
Так что, возможно, стоит взломать сериализатор категорий, чтобы он не отправлял никаких категорий. Хотя это кажется сложным, ведь нужно будет понять, как взломать его только при редактировании темы, а не при её создании.
Столкнулся с таким же поведением и не знал, что делать. Вся моя разработка и тестирование осуществляются через API-запросы, так как на фронтенде пока ничего нет, поэтому я был сбит с толку, когда ответы, которые я получал, выглядели как успешные. Я думал, что мои проверки полностью неработоспособны, пока не собрал минимальный отладчик и не прошел через пошаговое выполнение.
edit:
Хм… решил полностью перезагрузить окружение, и оно начало возвращать сообщения об ошибках в ответе API.