Кодер рендеринга фактического рубинового кода
У меня установлен RedCloth с Coderay, чтобы выделить мой код, вставленный в мой блог.
Если я вставлю некоторый код, как это:
CodeRay.scan(
"set_meta_tags :og => {
:title => @blog.title,
:type => 'article',
:url => current_url,
:image => @blog.blog_images.first.image.url,
:article => {:published_time => @blog.created_at.to_time.iso8601,
:modified_time => @blog.updated_at.to_time.iso8601,
:author => 'Name',
:section => @blog.categories.first.name,
:tags => @blog.categories.map(&:name).join(', ')
}}",
:ruby).div(:css => :class)
Я получил это
set_meta_tags :og => {
:title => blog</span>.title,
<span class="symbol">:type</span> => <span class="string"><span class="delimiter">'</span><span class="content">article</span><span class="delimiter">'</span></span>,
<span class="symbol">:url</span> => current_url,
<span class="symbol">:image</span> => <span class="instance-variable">blog.blog_images.first.image.url,
:article => {:published_time => blog</span>.created_at.to_time.iso8601,
<span class="symbol">:modified_time</span> => <span class="instance-variable">blog.updated_at.to_time.iso8601,
:author => ‘Name’,
:section => blog</span>.categories.first.name,
<span class="symbol">:tags</span> => <span class="instance-variable">blog.categories.map(&:name).join(‘, ’)
}}
Как я могу избавиться от этого?
Большое спасибо
1 ответ
Решение
Вы можете пройти разметку через sanitize
перед выводом его в виде. Это сохранит безопасные HTML-теги, но лишит потенциально вредных вещей, таких как <script>
:
<%= sanitize CodeRay.scan(..., :ruby).div(:css => :class) %>
Если вы можете доверять разметке 100% (я думаю, что вы можете в этом случае), вы можете использовать raw
обойти спасение или html_safe
пометить строку как безопасную. Это приведет к выводу всех тегов.
<%= raw CodeRay.scan(..., :ruby).div(:css => :class) %>
или же
<%= CodeRay.scan(..., :ruby).div(:css => :class).html_safe %>
Также см. http://guides.rubyonrails.org/active_support_core_extensions.html