Come sollevare un errore da un blocco PostRevisor e mostrarlo all'utente?

Ecco un po’ di codice in cui voglio aggiungere una validazione aggiuntiva

(codice e caso d’uso semplificati)

# impedisce ai non staff di cambiare categoria in un argomento
  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] << "non puoi cambiare categoria in questo tipo di argomento"
    end
  end

questo impedirà che la Categoria venga cambiata da non staff, ma non genera un errore.

Questo funzionava:

Quel plugin è stato da allora archiviato.

Questo requisito dovrebbe sicuramente essere supportato dall’API?

Sei più bravo in queste cose di me, ma penserei che Rails non abbia bisogno di rimandare questo indietro perché ci si aspetta che Ember non permetta all’utente di selezionare una categoria che non sia una che l’utente dovrebbe essere in grado di selezionare. Quindi, forse assicurati che il front-end impedisca loro di cambiare categoria se non dovrebbero farlo, in modo che PostRevisor non venga mai messo di fronte a questa situazione scomoda?

1 Mi Piace

sì, certo, è una considerazione.

È buona norma limitare prima lato API, poi lato front-end se possibile - cioè non dovresti mai fare affidamento solo sul front-end per prevenire un’azione illegale.

Inoltre, il front-end dovrebbe propagare gli errori di Active Record.

Quindi eseguire questo lato API è importante.

Concordo. Vuoi che Rails lo imponga.

Pensavo di aver capito che stesse imponendo il requisito e rifiutandosi di apportare la modifica, ma semplicemente non fornendo un errore sufficientemente valido al front-end.

1 Mi Piace

Sì, hai ragione.

Sto solo cercando di impedire un cambio di categoria, quindi l’interfaccia utente è piuttosto inutile in quanto è progettata per consentirti di modificare tutti i metadati o nessuno.

Quindi un errore segnalato sarebbe davvero utile.

La rigidità dei template .gjs rende questi tipi di modifiche molto difficili ora.

Questo template è ancora hbs ma non voglio sovrascriverlo per ovvie ragioni.

Proverò un hack CSS.

Di nuovo, sei più bravo di me in questo, ma penserei che sarebbe possibile nascondere il selettore di categoria sembra che non funzionerà.

Quindi forse la cosa da fare è modificare il serializzatore di categoria in modo che non invii alcuna categoria. Sembra complicato, però, dato che dovresti capire come modificarlo solo quando stai modificando un argomento anziché crearne uno.

1 Mi Piace

“Hack” funzionato :tada: :

Vorrei comunque una risposta verbosa e sensata dal server, e specialmente una che sfruttasse Active Record.

Ho riscontrato questo comportamento anch’io e non sapevo cosa fare. Tutto il mio sviluppo e test avviene tramite richieste API poiché non ho ancora nulla sul frontend, quindi ero confuso quando le risposte che ricevevo sembravano successi. Pensavo che le mie protezioni fossero completamente non funzionali finché non ho messo insieme il minimo di un debugger e ho lottato attraverso lo stepper.

modifica:
Huh… ho deciso di riavviare completamente il mio ambiente e ha iniziato a restituire messaggi di errore nella risposta API.