由于存在唯一索引,可以移除 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_theme_id) 和 ChildTheme2(id2, child_theme_id2, parent_theme_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 函数。我们可以移除它以提升性能。

好的,您可能想就此变更提交一个拉取请求。

注意,从性能角度来看这不会有任何区别,但它确实稍微提高了清晰度,因此我也支持在此处提交 PR。

已提交 Update theme.rb by jwjwyoung · Pull Request #8472 · discourse/discourse · GitHub