mirror of
https://github.com/discourse/discourse.git
synced 2026-08-08 20:18:23 -05:00
Related: https://meta.discourse.org/t/yet-another-title-localization-issue/395469 ### bug context tldr; `Topic#fancy_title` saves a fancy_title to db when the fancy_title is null. This bug requires a certain incantation to trigger. - Topic 395465 exists with `title = "Notification level button always says \"tracking\""` and `fancy_title = NULL` in the DB - A `TopicLocalization` exists for this topic in `zh_CN` - `content_localization_enabled` is on When a crawler hits `GET /t/.../395465?tl=zh_CN`, localization replacement happens on the topic, which writes the title attribute, so the state is now - `title` = Chinese (modified) - `fancy_title` = NULL (untouched, still what was loaded from DB) When serializing via `TopicViewSerializer` which uses `LocalizedFancyTopicTitleMixin`, we call `topic.fancy_title`. The `topic#fancy_title` generates the fancy_title from the title value, then writes the chinese fancy title to db 😢 https://github.com/discourse/discourse/blob/e935ed63b28a30ee7ae6a7783ae05fe33edf3367/app/models/topic.rb#L532-L545 ### fix This commit fixes the issue by ensuring the fancy_title is always written along with the title, preventing the need for invoking `topic#fancy_title`.