Обработка более чем одного языка разметки в текстовой области

Теперь я хотел бы узнать, как обрабатывать несколько языков разметки (текстиль, уценку и bbcode) в текстовой области с помощью ruby ​​on rails 3.

Пользователь сможет выбрать язык разметки, который он / она хочет использовать, писать на этом языке, а затем представление будет отображать текст, используя язык разметки, выбранный пользователем.

В настоящее время я занимаюсь хранением поля для каждой текстовой области, но я уверен, что есть лучшие способы, и я хотел бы услышать ваше мнение и придумать лучший способ.


person Abel Toy    schedule 06.01.2011    source источник


Ответы (1)


Когда вы обрабатываете разметку, введенную пользователем? Им когда-нибудь понадобится восстановить его?

Я бы сделал это с помощью трех атрибутов в моей модели: original_text, markup_language (который является текстилем, уценкой или bbcode) и rendered_text. Когда пользователь нажимает «Сохранить», я сохраняю текст и использую значение, которое они предоставили для markup_language, чтобы выяснить, какой модуль рендеринга использовать для его сохранения в rendered_text.

person girasquid    schedule 06.01.2011
comment
Да, мне нужно будет повторно получить markup_language, выбранный пользователем, и original_text. Мне нравится использование rendered_text для кеширования уже отрисованного текста, я каждый раз думал о рендеринге в представлении. Этот метод намного лучше. Проблема с вашим решением заключается в том, что мне понадобится этот подход для множества моделей и полей, а создание original_text, markup_language и rendered_text для каждого поля, которое я хочу использовать, не очень СУХОЕ. Как я могу подойти к этому более СУХИМ способом? Может быть, вставить небольшую модель (модель MarkupText) в каждое поле, которое в этом нуждается? Это возможно? - person Abel Toy; 07.01.2011
comment
Это определенно возможно - вам просто нужно создать внешний ключ для каждого из ваших fields, вместо того, чтобы иметь их напрямую в вашей модели. - person girasquid; 07.01.2011
comment
Тогда спасибо. Я собираюсь использовать это решение: D - person Abel Toy; 07.01.2011