您好 @Discourse,
我创建了一个将图像上传到帖子的插件,并将文件路径保存在 custom_fields 中。但是,Discourse 会删除所有为帖子上传的图像,因为它将未链接的图像视为孤立图像。因此,谁能指导我如何将上传的图像链接到相应的帖子?
我尝试更新 image_upload_id,但不知何故它没有更新 topic 表中的列值。
任何建议都将非常有帮助!
谢谢!
您好 @Discourse,
我创建了一个将图像上传到帖子的插件,并将文件路径保存在 custom_fields 中。但是,Discourse 会删除所有为帖子上传的图像,因为它将未链接的图像视为孤立图像。因此,谁能指导我如何将上传的图像链接到相应的帖子?
我尝试更新 image_upload_id,但不知何故它没有更新 topic 表中的列值。
任何建议都将非常有帮助!
谢谢!
有一个 插件 API 函数 register_upload_in_use
有关如何使用它的示例,请参阅 Chat 插件中的代码。
抱歉,那只是一个部分回复,它只会阻止图片孤立。你应该能够从你的代码中设置 topic.image_upload_id,但当帖子被重新烘焙时,它会被覆盖。所以你也应该挂钩到重新烘焙代码。
您能指导我如何做到这一点吗?如果您能分享一些例子,因为我对 Ruby 不太了解,但我可以用 JavaScript 工作,而且我刚开始接触 Discourse,所以对 Discourse 的定制不太了解 ![]()
这是更新 image_upload_id 主题的代码,它在 CookedPostProcessor::update_post_image 中。
所以你可以 猴子补丁这个函数,然后做类似的事情
def update_post_image
super # 调用原始函数
if @post.custom_fields[:your_field_name_upload_id]
upload_id = @post.custom_fields[:your_field_name_upload_id]
@post.update_column(:image_upload_id, upload_id) # 帖子
if @post.is_first_post? # 主题
@post.topic.update_column(:image_upload_id, upload_id)
end
end
end
image_upload_id 已为帖子和主题更新,但图片仍被删除。我确实使用了 register_upload_in_use API 函数。
我添加了以下代码来检查主题的 custom_fields,其中 topic_file_upload 是字段名。这是正确的方法吗?
if respond_to?(:register_upload_in_use)
register_upload_in_use do |upload|
TopicCustomField.where(
name: 'topic_file_upload',
value: [upload.url, upload.sha1]
).exists?
end
end
TopicCustomField 包含什么?我猜它包含上传 ID?
如果是这样,它应该更像
if respond_to?(:register_upload_in_use)
register_upload_in_use do |upload|
TopicCustomField.where(
name: 'topic_file_upload',
value: upload.id
).exists?
end
end
它有图片网址,但我已在自定义字段中添加了新字段用于图片 ID,现在正按您在代码中提到的方式检查 ID。我认为,如果我使用了下面的代码,也许它应该可以工作?
TopicCustomField.where(
name: 'topic_file_upload',
value: upload.url
).exists?
奇怪 - 如果它有 URL,它应该可以正常工作,因为 value: [upload.url, upload.sha1] 也会匹配 URL 和 SHA1 ![]()
感谢 @RGJ 的帮助!对我来说,id 比 url 好用。
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.