Ich arbeite an einem Plugin, das neuen Themen in einer Kategorie automatisch einen Standard-Tag zuweist.
Der folgende Code „funktioniert“, wenn ich Tag-Namen durch ein „|“ trenne, also funktioniert „tag1|tag2“. (Ich kann es kaum glauben! Aber ich schweife ab.)
<h3>{{i18n 'topic_default_tag.title'}}</h3>
<section class='field default-tag'>
<div class="default-tag">
<label>
{{input type="list" value=category.custom_fields.default_tag }}
{{popup-input-tip validation=tagValidation}}
{{i18n 'topic_default_tag.default_tag'}}
</label>
</div>
</section>
Was ich jetzt möchte, ist ein echter Tag-Auswähler statt eines nicht validierten Strings. Es scheint, als ob folgendes funktionieren sollte:
<h3>{{i18n 'topic_default_tag.title'}}</h3>
<section class='field default-tag'>
<div class="default-tag">
<label>
{{tag-chooser tags=category.custom_fields.default_tag tabindex="4" categoryId=category.id}}
{{popup-input-tip validation=tagValidation}}
{{i18n 'topic_default_tag.default_tag'}}
</label>
</div>
</section>
Aber das funktioniert nicht. Das Grundproblem ist, dass ich fast keine Ahnung habe, wie die Magie dieser Handlebars-Templates funktioniert. Ich vermute zwar, dass der erste Abschnitt funktioniert, weil er magisch den Feldnamen aus default-tag in <section class='field default-tag'> bezieht, aber das war eher Glück. ![]()
Wenn ich den tag-chooser verwende, werden die Tags als Array an Rails übergeben, das sie verwirft, bevor ich sie in einen durch | getrennten String umwandeln kann, um sie in CategoryCustomField einzufügen. Mit {{input type=list...}} kann ich den durch | getrennten String selbst eingeben, und das funktioniert einwandfrei. Brauche ich irgendeine Art von Ember-Magie, um das Array auf der Ember-Seite in einen String umzuwandeln?
Vielleicht muss ich etwas wie hier tun: What's the best approach to access category specific settings??
EDIT: Um Tags hinzuzufügen, bevor der Webhook aufgerufen wird, verwende after_create statt DiscourseEvent.on(:post_created). Rails ergibt jetzt größtenteils Sinn für mich, aber Ember, JavaScript und CSS weniger.