Aqui está um trecho de código onde quero adicionar validação adicional
(código e caso de uso simplificados)
# impede que não-staff altere a categoria em um tópico
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] << "você não pode mudar a categoria neste tipo de tópico"
end
end
isso impedirá que a Categoria seja alterada por não-staff, mas não gerará um erro.
Isso costumava funcionar:
No entanto, esse plugin foi arquivado.
Este requisito certamente deve ser suportado pela API?
Você é melhor nisso do que eu, mas eu pensaria que o Rails não precisa propagar isso de volta porque se espera que o Ember não permita que o usuário selecione uma categoria que não seja uma que o usuário deveria ser capaz de selecionar. Então, talvez certifique-se de que o front-end os impeça de alterar a categoria se eles não deveriam, para que o PostRevisor nunca seja confrontado com essa situação desconfortável?
É uma boa prática limitar primeiro no final da API, depois no front-end, se puder fazer isso - ou seja, você nunca deve confiar apenas no front-end para evitar uma ação ilegal.
Além disso, o front-end deve propagar os erros do Active Record.
Eu pensei que entendia que estava forçando o requisito e se recusando a fazer a alteração, mas apenas não fornecendo um erro bom o suficiente para o front-end.
Estou apenas tentando evitar uma alteração de categoria, então a interface do usuário é meio inútil, pois foi projetada para permitir que você altere todos os metadados ou nenhum deles.
Portanto, um erro propagado seria muito útil.
A rigidez dos modelos .gjs torna essas alterações muito complicadas agora.
Este modelo ainda é hbs, mas não quero substituí-lo por razões óbvias.
Novamente, você é melhor nisso do que eu, mas acho que seria possível ocultar o seletor de categoria isso não parece funcionar.
Então, talvez a coisa a fazer seja hackear o serializador de categoria para que ele não envie nenhuma categoria. Parece complicado, no entanto, pois você precisaria descobrir como hackeá-lo apenas ao editar um tópico em vez de criá-lo.
Também me deparei com esse comportamento e fiquei sem saber o que fazer. Todo o meu desenvolvimento e testes são feitos via requisições de API, já que ainda não tenho nada no frontend, então fiquei confuso quando as respostas que recebi pareciam sucessos. Pensei que minhas validações estavam completamente não funcionais até que montei o mínimo de um depurador e lutei através do stepper.
edit:
Huh… decidi reiniciar completamente meu ambiente e ele começou a retornar mensagens de erro na resposta da API.