2015-08-13 97 views
0

我希望我的博客网站上的用户能够在textarea中输入减价文字来制作博客帖子。然后这个降价文本将被转换成像Redcarpet或kramdown这样的工具。现在我也希望用户能够调用展示一些图片的局部视图。因此,换句话说,我希望用户能够在下面的代码输入之间的任何地方他降价文本(它被解释为ERB代码)Rails - 使用降价混合erb标签

<%= render partial: "slider", locals: {imgs: ["image1.jpg", "image2.jpg"]} %> 

这可能不知? kramdown允许你使用块级的HTML标签(div,p,pre,...),所以也许这可能会被用于某些优势?

+0

你真的应该标记编辑为不同的问题,有液体和红宝石标记,所以你可以从液体标签用户适当的帮助了。我个人从未创建液体标签,但应该很简单,通过检查Jekyll(红宝石宝石)的例子 –

+0

我提出了一个新问题:http://stackoverflow.com/questions/31999241/creating-a-custom-block-tag- in-liquid – sjbuysse

回答

3

您真的希望您的客户能够编写ERB吗?这是非常危险的,他们可以在ERB中使用任何Ruby功能,包括内核功能。怎么样让一个简单的模板系统,一个自定义的或现有的。例如,你可以使用Liquid(从Shopify),提供了一些自定义代码,以便它们并不需要所有的样板,但只是像{% dosomething 'partial', 'img1', 'img2' %},那么你首先转换成液体正常的文本,那么你转换降价为HTML,缓存它并将其显示给用户。举个例子:

# get your customer text from somewhere, like params[:markdown_text] 
template = params[:markdown_text] 
markdown = Liquid::Template.parse(template).render 
html_text = Redcarpet::Markdown.new(renderer, extensions = {}).render(markdown) 

puts html_text.to_s # => text with html tags, ensure to use `html_safe` on it in views 

,你有你的文字准备

+0

使用'Liquid'确实是一个很好的解决方案。 – EugZol