Como vincular imagens com o tópico

Olá @Discourse,

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.

Qualquer conselho seria de grande ajuda!

Obrigado!

Existe uma função da API de plugin register_upload_in_use

Para um exemplo de como usá-la, veja o código no plugin Chat.

1 curtida

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 :sweat_smile:

Aqui está o código que atualiza o tópico image_upload_id, está em CookedPostProcessor::update_post_image

Então, o que você poderia fazer é monkey patch essa função e então fazer algo como

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
1 curtida

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?

TopicCustomField.where(
            name: 'topic_file_upload',
            value: upload.url
        ).exists?

Estranho - se tivesse a URL, deveria ter funcionado antes, já que value: [upload.url, upload.sha1] corresponderia à URL, bem como ao SHA1 :thinking:

Obrigado @RGJ pela ajuda! Id funcionou para mim em vez de url

1 curtida

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.