Я создал плагин, который загружает изображения в темы, и сохраняю путь к файлу в custom_fields. Однако Discourse удаляет все загруженные для тем изображения, считая их «осиротевшими», так как они не связаны с темами. Не могли бы вы подсказать, как привязать загруженные изображения к соответствующим темам?
Я пытался обновить image_upload_id, но somehow это не обновляет значение столбца в таблице topics.
Извините, это был лишь частичный ответ — это предотвратит только сиротство изображений. Вы можете установить topic.image_upload_id в своём коде, но это значение будет перезаписано при повторной обработке HTML поста. Поэтому вам также следует подключить свой код к процессу rebake.
Можете, пожалуйста, подсказать, как это сделать? Было бы здорово, если бы вы могли привести пример, так как я не очень хорошо знаю Ruby, но могу работать с JavaScript. Кроме того, я новичок в Discourse и мало что знаю о кастомизации
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 для поста и темы, но изображения всё ещё удаляются. Я использовал функцию API register_upload_in_use.
Я добавил код ниже, чтобы проверить поле topic_file_upload в custom_fields темы. Правильно ли я это делаю?
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
Там есть URL изображения, но я добавил новое поле в пользовательские поля для ID изображения и теперь проверяю ID, как вы указали в коде. Я полагаю, что если бы я использовал код ниже, это должно было бы сработать, возможно?