Comment soulever une erreur depuis un bloc PostRevisor et la faire afficher à l'utilisateur ?

Voici un peu de code où je souhaite ajouter une validation supplémentaire

(code et cas d’utilisation simplifiés)

# empêcher les non-membres du personnel de changer la catégorie d'un sujet
  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] << "vous ne pouvez pas changer la catégorie de ce type de sujet"
    end
  end

cela empêchera la catégorie d’être modifiée par des non-membres du personnel, mais ne générera pas d’erreur.

Cela fonctionnait auparavant :

Ce plugin a depuis été archivé.

Cette exigence devrait certainement être prise en charge par l’API ?

Tu es meilleur que moi dans ce domaine, mais je penserais que Rails n’a pas besoin de remonter cela car on s’attend à ce qu’Ember ne permette pas à l’utilisateur de sélectionner une catégorie qui ne soit pas une catégorie que l’utilisateur devrait pouvoir sélectionner. Alors peut-être assurez-vous que le front-end les empêche de changer la catégorie s’ils ne sont pas censés le faire, de sorte que PostRevisor ne soit jamais confronté à cette situation inconfortable ?

1 « J'aime »

oui, bien sûr, c’est une considération.

C’est une bonne pratique de limiter d’abord au niveau de l’API, puis au niveau du front-end si vous le pouvez - c’est-à-dire que vous ne devriez jamais vous fier uniquement au front-end pour empêcher une action illégale.

De plus, le front-end devrait remonter les erreurs Active Record.

Il est donc important d’effectuer cela au niveau de l’API.

D’accord. Vous voulez que Rails l’impose.

Je pensais avoir compris que cela imposait l’exigence et refusait d’effectuer le changement, mais ne fournissait pas une erreur suffisamment bonne au front-end.

1 « J'aime »

Oui, vous avez raison.

J’essaie seulement d’empêcher un changement de catégorie, donc l’interface utilisateur est plutôt inutile car elle est conçue pour vous permettre de modifier toutes les métadonnées ou aucune d’entre elles.

Ainsi, une erreur remontée serait vraiment utile.

La rigidité des modèles .gjs rend ces types de changements très délicats maintenant.

Ce modèle est toujours en hbs mais je ne veux pas le remplacer pour des raisons évidentes.

J’essaierai un hack CSS.

Encore une fois, tu es meilleur que moi pour ça, mais je pensais que ce serait possible de cacher le sélecteur de catégorie ça ne semble pas fonctionner.

Alors peut-être que la chose à faire est de pirater le sérialiseur de catégorie pour qu’il n’envoie aucune catégorie. Cela semble délicat, cependant, car il faudrait trouver comment le pirater uniquement lorsque vous modifiez un sujet plutôt que d’en créer un.

1 « J'aime »

« Hack » a fonctionné :tada: :

J’aimerais toujours une réponse verbeuse et sensée du serveur, et particulièrement une qui exploite Active Record.

J’ai également rencontré ce comportement et j’étais perdu. Tout mon développement et mes tests se font via des requêtes API car je n’ai encore rien sur le frontend, donc j’étais confus lorsque les réponses que j’obtenais ressemblaient à des succès. Je pensais que mes gardes étaient complètement non fonctionnels jusqu’à ce que j’assemble le minimum d’un débogueur et que je lutte à travers le pas à pas.

edit :
Huh… j’ai décidé de redémarrer complètement mon environnement et il a commencé à renvoyer des messages d’erreur dans la réponse de l’API.