Distinct можно убрать из-за уникального индекса

В файле theme.rb есть код
ChildTheme.where(parent_theme_id: theme_id).distinct.pluck(:child_theme_id), где вызов distinct можно убрать, поскольку добавлен уникальный индекс в файле discourse/db/migrate/20170313192741_add_themes.rb: add_index :child_themes, [:parent_theme_id, :child_theme_id], unique: true.

Это означает, что для двух дочерних тем: ChildTheme1(id1, child_theme_id1, parent_them_id) и ChildTheme2(id2, child_theme_id2, parent_them_id), если child_theme_id1 == child_theme_id2, то id1 = id2, иначе комбинация [:parent_theme_id, :child_theme_id] не будет уникальной. Следовательно, ChildTheme.where(parent_theme_id: theme_id).pluck(:child_theme_id) вернёт уникальные значения child_theme_id, поэтому вызов distinct не нужен. Его можно удалить для улучшения производительности.

Хорошо, возможно, вам стоит отправить pull-запрос с этим изменением.

Обратите внимание: с точки зрения производительности это не изменит ничего, но это немного улучшает читаемость, поэтому я также поддерживаю PR здесь.

Отправлено Update theme.rb by jwjwyoung · Pull Request #8472 · discourse/discourse · GitHub