Como gerar um erro a partir de um bloco PostRevisor e exibi-lo ao usuário?

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?

1 curtida

sim, claro, isso é uma consideração.

É 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.

Portanto, realizar isso na API é importante.

Concordo. Você quer que o Rails force isso.

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.

1 curtida

Sim, você está certo.

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.

Vou tentar um hack de CSS.

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.

1 curtida

“Hack” funcionou :tada: :

Eu ainda gostaria de uma resposta verbosa e sensata do servidor e especialmente uma que aproveitasse o Active Record.

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.