2009-10-24 5 views
2

J'utilise BlueCloth pour créer HTML à partir démarques à partir du contenu de mes utilisateurs entrent dans une zone de texte comme celui-ci:afficher démarquage dans mon textarea

def create 
    @post = Post.new(params[:post]) do |post| 
    body = BlueCloth.new(post.body) 
    post.body = body.to_html 
    end 

... 

end 

Cela fonctionne très bien! Je reçois le html stocké dans la base de données bien, mais comment puis-je montrer markdown dans la zone de texte lorsque l'utilisateur édite? J'ai essayé:

def edit 
    @post = Post.find(params[:id]) 
    @post.body = BlueCloth.new(@post.body) 
    @post.body.text 
end 

La sortie dans mon textarea ressemble:

#<BlueCloth:0x10402d578> 

Répondre

2

documentation de BlueCloth est pas très bien défini. Je ne suis pas sûr qu'il existe un moyen facile de convertir html => markdown. Cependant, rien n'empêche de stocker la démarque dans votre base de données et de la convertir en html si nécessaire.

Si vous souhaitez que html soit la valeur par défaut renvoyée par @ post.body, vous pouvez toujours remplacer l'accesseur.

class Post < ActiveRecord::Base 
    ... 
    def body 
    BlueCloth.new(@body).to_html 
    end 

    def markdown 
    @body 
    end 
end 

Maintenant @ post.body retourne la version html du démarquage. tandis que @ post.markdown renvoie la source de démarque.

+0

Yah c'est un bon point, je devrais faire cela pour l'instant. J'espérais renoncer à avoir à exécuter cette méthode sur le texte chaque fois qu'il rend en stockant simplement le code HTML après l'enregistrement. –

+0

Vous soulevez un point intéressant. J'ai mis à jour ma solution avec un travail. – EmFi

+0

Facultativement, vous pouvez stocker le code HTML généré dans une colonne distincte de votre tableau Post. – berkes

Questions connexes