トピックに画像をリンクする方法

こんにちは @Discourse

トピックに画像をアップロードするプラグインを作成し、ファイルパスをカスタムフィールドに保存していますが、Discourse はトピックにリンクされていない画像を孤立した画像と見なして、トピック用にアップロードされたすべての画像を削除します。したがって、アップロードされた画像をそれぞれのトピックにリンクする方法を教えていただけますか?

image_upload_id を更新しようとしましたが、トピックテーブルの列の値が更新されないようです。

何かアドバイスがあれば幸いです!

ありがとうございます!

register_upload_in_use という プラグインAPI関数 があります。

使用例については、Chatプラグインのコード を参照してください。

「いいね!」 1

申し訳ありませんが、それは一部の返信にすぎず、画像が孤立するのを防ぐだけです。コードからtopic.image_upload_idを設定できるはずですが、投稿のHTMLがリベイクされるときに上書きされます。そのため、リベイクコードにもフックする必要があります。

それをどのように行うことができるか、例を共有していただければ、ご案内できますか?私はRubyをあまり知らないのですが、JavaScriptは使えますし、Discourseも初心者なので、Discourseのカスタマイズについてはあまり知りません :sweat_smile:

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) # post
    if @post.is_first_post? # topic
        @post.topic.update_column(:image_upload_id, upload_id)
    end
  end
end

image_upload_id が投稿とトピックで更新されましたが、画像は引き続き削除されています。register_upload_in_use API 関数を使用しました。

トピックの custom_fieldstopic_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
「いいね!」 1

画像URLがありますが、画像IDのためにカスタムフィールドに新しいフィールドを追加し、コードで言及したようにIDを確認しています。以下のようなコードを使用すれば機能するのではないでしょうか?

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

奇妙ですね。URLがあれば、value: [upload.url, upload.sha1] はURLとSHA1の両方に一致するため、以前は機能していたはずです :thinking:

@RGJ、手伝ってくれてありがとう!urlの代わりにidが機能しました。

「いいね!」 1

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