J'utiliser un Model callback pour générer le code html lors de l'enregistrement de la Note:
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
Afin de réellement voir la note à une URL comme /notes/show/something
vous devez dire à Rails comment l'accepter (Rai Les routes 'show' attendent généralement l'ID de l'enregistrement que vous montrez. Dans votre modèle Notes, entrez quelque chose comme ça (je suppose que vous avez un champ appelé url
qui est une URL conviviale titre):
def Note.find_by_id_or_url id
Note.find :first, :conditions => ['id = ? or url = ?', id, id]
end
Et puis dans le contrôleur Notes, ajouter quelque chose comme ça pour le show
Action:
@note = Note.find_by_id_or_url(params[:id])
Personnellement, je ne recommanderais pas d'écrire votre propre analyseur de syntaxe et juste utiliser quelque chose comme Markdown.
ne serait pas gsub être mieux? - nécessite le remplacement de la chaîne plutôt que de la faire correspondre.L'ajout d'attributs virtuels ressemble à briser une mouche avec un marteau, d'autant plus que ce type de logique devrait appartenir à la vue, éventuellement à l'aide d'une méthode d'aide. –