He creado un plugin que sube una imagen a los temas y guardo la ruta del archivo en custom_fields. Sin embargo, Discourse elimina todas las imágenes que se suben para los temas, considerando que las imágenes huérfanas no están vinculadas a los temas. Por lo tanto, ¿alguien puede guiarme sobre cómo puedo vincular las imágenes subidas a los temas correspondientes?
Intenté actualizar el image_upload_id, pero de alguna manera no se actualiza el valor de las columnas en la tabla topic.
Lo siento, esa fue solo una respuesta parcial, solo evitará que las imágenes queden huérfanas. Deberías poder establecer topic.image_upload_id desde tu código, pero se sobrescribirá cuando se vuelva a hornear el HTML de una publicación. Así que también deberías engancharte al código de horneado.
¿Puedes guiarme sobre cómo puedo hacer eso? Si puedes compartir algunos ejemplos, porque no sé mucho de Ruby, pero puedo trabajar con JavaScript y también soy nuevo en Discourse, así que no sé mucho sobre la personalización de Discourse
def update_post_image
super # llama al original
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) # post
if @post.is_first_post? # topic
@post.topic.update_column(:image_upload_id, upload_id)
end
end
end
Se ha actualizado el image_upload_id para publicaciones y temas, pero las imágenes todavía se eliminan. Sí utilicé la función de API register_upload_in_use.
He agregado el siguiente código para verificar en los custom_fields del tema, donde topic_file_upload es el nombre del campo. ¿Es esta la forma correcta de hacerlo?
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
¿Qué contiene TopicCustomField? Supongo que contiene el ID de carga.
En ese caso, debería ser más parecido a
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
Tiene la URL de la imagen, pero he añadido un nuevo campo en los campos personalizados para el ID de la imagen y ahora estoy comprobando el ID como mencionaste en el código. Creo que si hubiera utilizado el siguiente código, ¿quizás debería funcionar?