RGJ
(Richard - Communiteq)
1
我对群组私有收件箱不太熟悉,也不确定如何复现此问题,但出现了以下情况:
- 已为某个群组(我们称之为 ExampleGroup)设置了私有消息收件箱。
- 该群组成员收到通知:“您的 examplegroup 收件箱中有 6 条消息”。
- 点击该通知时,尝试加载
/topics/private-messages-group/username/examplegroup.json。
- 这导致报错。
我认为这是因为系统中没有名为 examplegroup 的群组,实际群组名称是 ExampleGroup。
ListController::generate_message_route 执行了以下操作:
group = Group.find_by(name: params[:group_name])
如果将其改为:
group = Group.find_by(name: params[:group_name])
group = Group.where('lower(name) = ?', params[:group_name].downcase).first unless group
似乎可以解决问题。但我相信这并非根本原因。我认为在某个地方,本不应被转换的参数被错误地转为了小写。
大家有什么建议,应该从哪里入手排查吗?
3 个赞
angus
(Angus McLeod)
3
如果你直接在控制台中创建通知,链接会保留大小写(即使数据是假的也能正常工作)
Notification.create!(
user_id: 1,
notification_type: Notification.types[:group_message_summary],
data: { inbox_count: 5, group_name: "MyGroup", group_id: 41, username: 'angus' }.to_json
)
问题可能出在创建端,也就是帖子提醒器中:discourse/app/services/post_alerter.rb at main · discourse/discourse · GitHub
不过,我似乎无法复现这个问题。
1 个赞
RGJ
(Richard - Communiteq)
4
感谢您的帮助!但那个链接不正确,不是 /u/username/messages/group/groupname,而是 /topics/private-messages-group/username/groupname。我找不到后者是从哪里来的,也不知道如何生成它。
2 个赞
techAPJ
(Arpit Jalan)
5
我认为正确的修复方案是不要求 URL 参数中的群组名称大写。已通过以下方式完成:
请注意,访问 /u/username/messages/group/groupname 会触发一个 AJAX 请求到 /topics/private-messages-group/username/groupname,因此 @angus 上面为调试此问题所采取的操作看起来是正确的。
感谢报告此问题 @RGJ 
5 个赞