2009-10-24 83 views
2

我使用BlueCloth从我的用户进入到一个textarea这样的内容创建HTML降价:在我的textarea显示降价

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

... 

end 

这个伟大的工程!我得到存储在数据库中的html很好,但是如何在用户编辑时在textarea中显示markdown?我想:

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

在我的textarea的输出如下所示:

#<BlueCloth:0x10402d578> 

回答

2

Bluecloth的文档没有很好的界定。我不确定有一个简单的方法来转换HTML =>降价。

但是,没有什么能够阻止您在数据库中存储降价,并根据需要将其转换为html。

如果你希望html是@ post.body返回的默认值,那么你总是可以覆盖访问器。

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

    def markdown 
    @body 
    end 
end 

Now @ post.body返回markdown的html版本。而@ post.markdown返回降价来源。

+0

是的,这是一个好点,我现在可能必须这样做。我希望放弃在每次渲染时在文本上运行该方法,只需在保存后存储该html即可。 – 2009-10-24 06:41:08

+0

您提出了一个有趣的观点。我已经通过解决方案更新了解决方案。 – EmFi 2009-10-24 06:48:47

+0

或者,您可以将呈现的HTML存储在Post表中的单独列中。 – berkes 2010-08-04 19:42:38