2011-01-06 7 views
1

Ich möchte, wie man jetzt mehrere Markup-Sprachen (Textil, Abschlags und bbcode) in einem Textbereich mit Ruby on Rails 3.mehr als eine Markup-Sprache in einem Bereich Text Handhabung

Der Benutzer zu handhaben wäre kann die Markup-Sprache auswählen, die er verwenden möchte, in diese Sprache schreiben, und dann würde die Ansicht den Text unter Verwendung der vom Benutzer ausgewählten Markup-Sprache darstellen.

Ich bin derzeit damit beschäftigt, ein Feld für jeden Textbereich zu speichern, aber ich bin mir sicher, es gibt bessere Wege und ich würde gerne Ihre Meinung hören und einen besseren Weg finden.

Antwort

1

Wann verarbeiten Sie das Markup, das der Benutzer eingibt? Werden sie es jemals wieder abrufen müssen?

Ich würde dies tun, indem ich drei Attribute auf meinem Modell habe: original_text, markup_language (das ist entweder Textil-, Markdown- oder BBCode) und rendered_text. Wenn der Benutzer auf Speichern klickt, würde ich den Text speichern und den Wert verwenden, den er für markup_language bereitgestellt hat, um herauszufinden, welcher Renderer verwendet werden soll, um ihn in rendered_text zu speichern.

+0

Ja, ich werde die markup_language, die der Benutzer ausgewählt hat, und den originaltext erneut abrufen müssen. Ich mag die Verwendung von rendered_text, um den bereits gerenderten Text zwischenzuspeichern, ich dachte jedes Mal an die Ansicht zu rendern. Diese Methode ist viel besser. Das Problem mit Ihrer Lösung ist, dass ich diesen Ansatz für viele Modelle und Felder brauche und originally_text, markup_language und rendered_text für jedes Feld, das ich verwenden möchte, nicht sehr DRY ist. Wie würde ich das auf einem trockeneren Weg angehen? Vielleicht ein kleines Modell (MarkupText-Modell) in jedes Feld einfügen, das das braucht? Ist das möglich? –

+0

Es ist definitiv möglich - Sie müssen nur einen Fremdschlüssel für jedes Ihrer 'Felder' erstellen, anstatt sie direkt auf Ihrem Modell zu haben. – girasquid

+0

Danke dann. Ich werde diese Lösung verwenden: D –

Verwandte Themen