Aquí hay un poco de código donde quiero agregar validación adicional
(código y caso de uso simplificados)
# evitar que el personal no autorizado cambie la categoría de un tema
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] << "no puedes cambiar la categoría de este tipo de tema"
end
end
esto evitará que la categoría sea cambiada por personal no autorizado, pero no generará un error.
Esto solía funcionar:
Sin embargo, ese plugin ha sido archivado.
¿No debería este requisito ser compatible con la API?
Eres mejor en estas cosas que yo, pero pensaría que Rails no necesita comunicar esto porque se espera que Ember no permita al usuario seleccionar una categoría que no sea una que el usuario deba seleccionar. Entonces, ¿quizás asegurarse de que el front-end les impida cambiar la categoría si no se supone que deben hacerlo, para que PostRevisor nunca se enfrente a esta incómoda situación?
Es una buena práctica limitar primero en el extremo de la API, luego en el front-end si puedes hacerlo; es decir, nunca debes depender solo del front-end para evitar una acción ilegal.
Además, el front-end debería mostrar los errores de Active Record.
Por lo tanto, realizar esto en la API es importante.
Pensé que entendía que estaba imponiendo el requisito y negándose a hacer el cambio, pero simplemente no proporcionaba un error lo suficientemente bueno al front-end.
Solo estoy intentando evitar un cambio de categoría, por lo que la interfaz de usuario es un tanto inútil, ya que está diseñada para permitirle cambiar todos los metadatos o ninguno.
Por lo tanto, un error que se propague sería muy útil.
La rigidez de las plantillas .gjs hace que este tipo de cambios sean muy complicados ahora.
Esta plantilla sigue siendo hbs, pero no quiero anularla por razones obvias.
De nuevo, eres mejor en eso que yo, pero pensaría que sería posible ocultar el selector de categorías parece que eso no funcionará.
Así que tal vez lo que hay que hacer es hackear el serializador de categorías para que no envíe ninguna categoría. Sin embargo, parece complicado, ya que necesitarías averiguar cómo hackearlo solo cuando estuvieras editando un tema en lugar de crearlo.
También me encontré con este comportamiento y no sabía qué hacer. Todo mi desarrollo y pruebas son a través de solicitudes de API, ya que aún no tengo nada en el frontend, así que estaba confundido cuando las respuestas que obtuve parecían éxitos. Pensé que mis protecciones simplemente no funcionaban hasta que armé lo mínimo de un depurador y luché a través del paso a paso.
edición:
Vaya… decidí reiniciar completamente mi entorno y comenzó a devolver mensajes de error en la respuesta de la API.