Ich habe ein Plugin erstellt, das ein Bild in Themen hochlädt und den Dateipfad in benutzerdefinierten Feldern speichert. Discourse löscht jedoch alle hochgeladenen Bilder für die Themen, da es sie als verwaiste Bilder betrachtet, die nicht mit den Themen verknüpft sind. Kann mir jemand helfen, wie ich die hochgeladenen Bilder mit den entsprechenden Themen verknüpfen kann?
Ich habe versucht, die image_upload_id zu aktualisieren, aber irgendwie wird der Wert der Spalte in der Themen-Tabelle nicht aktualisiert.
Entschuldigung, das war nur eine Teilantwort, sie verhindert nur, dass Bilder verwaist werden. Sie sollten topic.image_upload_id aus Ihrem Code setzen können, aber er wird überschrieben, wenn das HTML für einen Beitrag neu gebacken wird. Sie sollten sich also auch in den Rebake-Code einhaken.
Können Sie mich bitte anleiten, wie ich das machen kann? Können Sie mir einige Beispiele geben, da ich nicht viel Ruby kann, aber mit JavaScript arbeiten kann und auch neu bei Discourse bin, also nicht viel über Discourse-Anpassungen weiß
def update_post_image
super # Original aufrufen
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) # Beitrag
if @post.is_first_post? # Thema
@post.topic.update_column(:image_upload_id, upload_id)
end
end
end
Es hat die image_upload_id für Beiträge und Themen aktualisiert, aber die Bilder werden immer noch gelöscht. Ich habe die API-Funktion register_upload_in_use verwendet.
Ich habe den folgenden Code hinzugefügt, um in den benutzerdefinierten Feldern des Themas zu prüfen, wobei topic_file_upload der Feldname ist. Ist das der richtige Weg, um das zu tun?
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
Was enthält TopicCustomField? Ich nehme an, es enthält die Upload-ID?
In diesem Fall sollte es eher so aussehen:
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
Es hat eine Bild-URL, aber ich habe ein neues Feld in benutzerdefinierten Feldern für die Bild-ID hinzugefügt und prüfe nun die ID, wie Sie im Code erwähnt haben. Ich glaube, wenn ich den folgenden Code verwendet hätte, hätte er vielleicht funktioniert?
Seltsam – wenn es die URL hätte, hätte es vorher funktionieren müssen, da value: [upload.url, upload.sha1] sowohl mit der URL als auch mit der SHA1 übereinstimmen würde