# La modification du sérialiseur de catégorie se comporte différemment en 2.4.0

**URL:** https://meta.discourse.org/t/category-serializer-modification-is-behaving-differently-in-2-4-0/126612
**Category:** Development
**Created:** [Août 23, 2019, 5:49 UTC](https://meta.discourse.org/t/category-serializer-modification-is-behaving-differently-in-2-4-0/126612 "2019-08-23T05:49:05Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [Août 23, 2019, 5:49 UTC](https://meta.discourse.org/t/category-serializer-modification-is-behaving-differently-in-2-4-0/126612/1 "2019-08-23T05:49:05Z")

</div>

Après la mise à niveau vers [Release v2.4.0.beta2 · discourse/discourse · GitHub](https://github.com/discourse/discourse/releases/tag/v2.4.0.beta2), presque tous nos plugins (par exemple, les aperçus de listes de sujets, les événements, les lieux, les notations, etc.) rencontrent un problème avec la méthode add\_to\_serializer dans plugin.rb.

L’utilisation existante suivait ce format :

```plaintext
add_to_serializer(:serializer, property) { value }

```

Cela ne fonctionne plus dans un environnement de production. Il fonctionne toujours dans un environnement de développement.

Au départ, j’ai pensé que cela pourrait être lié à la façon dont l’activation des plugins est gérée. En effet, la méthode `_include?` de add\_to\_serializer utilise l’état enabled?

```plaintext
if define_include_method
   # Ne pas inclure les méthodes sérialisées si le plugin est désactivé
  klass.public_send(:define_method, "include_#{attr}?") { plugin.enabled? }
end

```

Cependant, l’utilisation du système `enabled_site_setting` ne semble pas résoudre le problème. De plus, `enabled?` semble toujours revenir à true par défaut :

```plaintext
def enabled?
  @enabled_site_setting ? SiteSetting.get(@enabled_site_setting) : true
end

```

Pour résoudre le problème immédiat, nous avons modifié la façon dont nos plugins sérialisent les données, mais je souhaiterais comprendre ce qui se passe si possible. Quelqu’un a-t-il des idées sur ce qui se passe ici ?

cc @merefield, @fzngagan

---

<div class="post-metadata">

### Author: ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)
#### Post date: [Août 23, 2019, 4:03 UTC](https://meta.discourse.org/t/category-serializer-modification-is-behaving-differently-in-2-4-0/126612/2 "2019-08-23T16:03:39Z")

</div>

C’est très inhabituel, car nous utilisons cela dans les sondages et ils ne sont certainement pas cassés. La seule chose à laquelle je puisse penser, c’est qu’ils étaient cassés dans la version bêta, mais corrigés dans la branche master ? Pouvez-vous essayer sur tests-passés et voir s’ils fonctionnent ?

---

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [Août 23, 2019, 9:50 UTC](https://meta.discourse.org/t/category-serializer-modification-is-behaving-differently-in-2-4-0/126612/3 "2019-08-23T21:50:19Z")

</div>

Je vais tester davantage aujourd’hui. L’utilisation dans les sondages est légèrement différente, car la méthode \_include? est toujours précédée d’un troisième paramètre `false`. Je soupçonne que la méthode include? pourrait être en cause.

```plaintext
add_to_serializer(:post, :polls_votes, false)

```

---

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [Août 24, 2019, 1:41 UTC](https://meta.discourse.org/t/category-serializer-modification-is-behaving-differently-in-2-4-0/126612/4 "2019-08-24T01:41:49Z")

</div>

Il semble que ce problème soit spécifique aux modifications des sérialiseurs de catégories.

[https://staging.discourse.angusmcleod.com.au](https://staging.discourse.angusmcleod.com.au) a un seul plugin installé : « test-add-to-serializer »

> <https://github.com/angusmcleod/test-add-to-serializer/blob/master/plugin.rb>

Comme vous pouvez le voir dans plugin.rb, plusieurs modifications sont apportées aux sérialiseurs.

Les modifications des sérialiseurs autres que ceux des catégories semblent fonctionner, mais les modifications du sérialiseur basic\_category ne fonctionnent qu’en développement.

Vous ne trouverez pas les propriétés de test de la catégorie à l’adresse suivante :

[https://staging.discourse.angusmcleod.com.au/categories.json](https://staging.discourse.angusmcleod.com.au/categories.json)

ou

[https://staging.discourse.angusmcleod.com.au/c/records-musicians.json](https://staging.discourse.angusmcleod.com.au/c/records-musicians.json)

Mais vous trouverez les autres propriétés de test à l’adresse suivante :

[https://staging.discourse.angusmcleod.com.au/t/this-is-a-title-of-a-topic/42.json](https://staging.discourse.angusmcleod.com.au/t/this-is-a-title-of-a-topic/42.json)

ou

[https://staging.discourse.angusmcleod.com.au/latest.json](https://staging.discourse.angusmcleod.com.au/latest.json)

Le problème semble donc ne pas concerner la méthode add\_to\_serializer en elle-même, mais la modification du sérialiseur basic\_category.

---

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [Août 26, 2019, 1:44 UTC](https://meta.discourse.org/t/category-serializer-modification-is-behaving-differently-in-2-4-0/126612/5 "2019-08-26T01:44:21Z")

</div>

@j.jaffeux @dan Salut :), il semble que vous ayez effectué un travail récent sur discourse-voting pour résoudre le même problème que j’ai décrit ci-dessus.

> <https://github.com/discourse/discourse-topic-voting/commit/7e6f27b198416a6ef27f0f0df715f5e6cfc00197>

Savez-vous pourquoi il n’est plus suffisant d’ajouter des propriétés au basic\_category\_serializer ?

---

<div class="post-metadata">

### Author: ![P16](https://avatars.discourse-cdn.com/v4/letter/p/b19c9b/32.png) [@P16](https://meta.discourse.org/u/P16)
#### Post date: [Août 26, 2019, 2:52 UTC](https://meta.discourse.org/t/category-serializer-modification-is-behaving-differently-in-2-4-0/126612/6 "2019-08-26T02:52:35Z")

</div>

Je peux confirmer que cela affecte tests-passed

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [Août 26, 2019, 7:59 UTC](https://meta.discourse.org/t/category-serializer-modification-is-behaving-differently-in-2-4-0/126612/7 "2019-08-26T07:59:06Z")

</div>

Dan est absent, mais essentiellement, il existe trois endroits différents où nous sérialisons les catégories avec des quantités de données variables. Nous verrons s’il est possible d’éliminer le mixin ici, ce qui rend le raisonnement plus difficile.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [Août 27, 2019, 8:28 UTC](https://meta.discourse.org/t/category-serializer-modification-is-behaving-differently-in-2-4-0/126612/8 "2019-08-27T08:28:37Z")

</div>

Corrigé et rétroporté sur les versions stable et bêta.

> <https://github.com/discourse/discourse/commit/bd5fa1737d42a958bb5cda35ae5bab2464d4e084>
>
> This is a very long standing bug we had, if a plugin attempted to amend a
> serial…izer core was not "correcting" the situation for all descendant classes
> this often only showed up in production cause production eager loads serializers
> prior to plugins amending them.
> 
> This is a critical fix for various plugins

Dan a correctement configuré la structure d’héritage ; il s’agissait simplement d’un bug majeur du cœur très ancien.

---

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [Août 27, 2019, 8:48 UTC](https://meta.discourse.org/t/category-serializer-modification-is-behaving-differently-in-2-4-0/126612/9 "2019-08-27T08:48:34Z")

</div>

Merci @sam, c’est très apprécié.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [Août 27, 2019, 8:49 UTC](https://meta.discourse.org/t/category-serializer-modification-is-behaving-differently-in-2-4-0/126612/10 "2019-08-27T08:49:57Z")

</div>

Merci d’avoir signalé et insisté sur ce point. C’était un cas très, très difficile à identifier. J’ai passé un peu de temps à examiner les internals de Rails pour comprendre ce qui se passait.

N’hésitez pas à consulter le nouveau test si vous êtes curieux de voir comment nous nous assurons que cela fonctionne correctement à l’avenir.

---

<div class="post-metadata">

### Author: ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)
#### Post date: [Août 27, 2019, 9:13 UTC](https://meta.discourse.org/t/category-serializer-modification-is-behaving-differently-in-2-4-0/126612/11 "2019-08-27T09:13:49Z")

</div>

Merci beaucoup, @sam, d’avoir corrigé cela rapidement.

@angus, notre plugin fonctionnera-t-il sans les récentes modifications que nous avons apportées en raison de cette correction ?
