Я бы использовал Модель обратного вызова для генерации HTML при сохранении примечания:
class Note < ActiveRecord::Base
before_save :generate_html
# ...other stuff...
def generate_html
# 'html' is a field whose value is a HTML version of the 'content' field
self.html = self.content.gsub(/\[{2}([a-z]*?)\]{2}/) { |match| link_to $1, "/notes/show/#{$1}" }
# generate other html...
end
end
Чтобы просмотреть примечание по URL-адресу, подобному /notes/show/something
, необходимо указать Rails, как его принять (маршруты 'show' для Rails обычно ожидают идентификатор записи, которую вы показываете). В вашей модели Notes введите что-то вроде этого (я предполагаю, что у вас есть поле с именем url
, подходящее для URL-адреса):
def Note.find_by_id_or_url id
Note.find :first, :conditions => ['id = ? or url = ?', id, id]
end
А затем в контроллере Notes добавьте что-то вроде этого для действия show
:
@note = Note.find_by_id_or_url(params[:id])
Лично я бы порекомендовал не писать собственный синтаксический анализатор, а просто использовать что-то вроде Markdown .