2
我想创建一个简单的部分,允许我显示代码块而不会通过我的代码中的奇怪的扭曲。完全逃脱多线erb段
所以我这样做的部分:
<% lang ||= "" %>
<% language = "lang='#{lang}'" %>
<div class="codebox">
<% if title %>
<h3><%= title %></h3>
<% end %>
<pre <%= language %>><%=text.unindent%></pre>
</div>
这在lib中撤消缩进字符串(感谢一个非常漂亮的SO建议):
class String
def unindent; gsub(/^#{scan(/^\s+/).min}/, "") end
end
然后,我可以做到这一点,并得到一个非常漂亮的小盒子代码:
<%= render partial: 'pre', locals: { title: "example.html", lang: 'html', text: "
<div class='cl' style='text-align:center'>
<div class='collapse-group'>
<!-- Title, always viewable -->
<a class='bundle' href='#'>'Click here to expand'</a>
<div class='collapse'>
<!-- The content to be hidden or shown -->
</div>
</div>
</div>
"} %>
这变成这样:
得好好的,除非我把一堆ERB的,在这种情况下,它会坚果和示数开始所有的地方。错误生产者的EX(。内容不是超级有关我确信内的所有报价都是双,而“串”是单引号):
<%= render partial: 'pre', locals: { title: "example.html", lang: 'html', text: '
<% sub ||= "" %>
<% term ||= "(expand)" %>
<% style ||= "" %>
<div class="cl" style="text-align:center">
<div class="collapse-group">
<<%=tag%> class="squeeze" style=<%="#{style}"%>>
<%=title%>
<% if sub != "" %>
<small><%= sub %></small>
<% end %>
<a class="bundle" href="#"><%= term %></a>
</<%=tag%>>
<div class="collapse">
' } %>
无论如何,我可以告诉HTML是什么,我把这些引号放在里面是100%文字字符?我已经尝试过单独转义“>”和“>”和“%”以及所有这些,并且我希望不会陷入混乱(无效)的路径。什么,我想上面看起来像
EX:
为什么要在视图图层中设置所有文本?我不清楚你想逃脱什么,什么你不逃,或者为什么无论你想逃脱的是在模板中声明/初始化。 –
好吧,这个想法是我会使用大量的代码框(有点像这样的代码框),我希望能够基本上粘贴我想格式化的代码并自动格式化,这就是我有上面第一个例子。它打破了ERB的例子。有没有更好的方法来做到这一点,我不知道?我绝对乐于接受建议。编辑 - 举了一个我想要完成以上任务的例子。 – Sasha
如果文本值通常来自数据库,请勿尝试通过手动填写模板进行测试。 –