Criei um plugin que carrega uma imagem para tópicos e estou salvando o caminho do arquivo em custom_fields. No entanto, o Discourse exclui todas as imagens carregadas para os tópicos, considerando-as imagens órfãs, pois não estão vinculadas aos tópicos. Portanto, alguém pode me orientar sobre como posso vincular as imagens carregadas aos respectivos tópicos?
Tentei atualizar o image_upload_id, mas de alguma forma o valor da coluna na tabela topic não está sendo atualizado.
Desculpe, essa foi apenas uma resposta parcial, ela só impedirá que as imagens fiquem órfãs. Você poderá definir topic.image_upload_id do seu código, mas ele será substituído quando o HTML de uma postagem for refeito. Portanto, você também deverá se conectar ao código de refazimento.
você pode me guiar em como posso fazer isso? Se puder compartilhar alguns exemplos, pois não sei muito de Ruby, mas posso trabalhar com JavaScript e também sou novo no Discourse, então não sei muito sobre personalização do Discourse
def update_post_image
super # chama o 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? # tópico
@post.topic.update_column(:image_upload_id, upload_id)
end
end
end
Ele atualizou o image_upload_id para post e tópico, mas as imagens ainda estão sendo excluídas. Eu usei a função de API register_upload_in_use.
Adicionei o código abaixo para verificar nos campos personalizados do tópico, onde topic_file_upload é o nome do campo. Esta é a maneira correta de fazer isso?
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
O que o TopicCustomField contém? Presumo que contenha o ID do upload?
Nesse caso, deveria ser mais como:
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
Ele tem a URL da imagem, mas adicionei um novo campo nos campos personalizados para o ID da imagem e agora estou verificando o ID como você mencionou no código. Acredito que se eu tivesse usado o código abaixo, ele poderia funcionar?