2014-09-26 2 views
0

У меня есть RedCloth с Coderay, чтобы выделить мой код, вставленный в моем блоге.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> =&gt; <span class="string"><span class="delimiter">'</span><span class="content">article</span><span class="delimiter">'</span></span>, 
     <span class="symbol">:url</span> =&gt; current_url, 
     <span class="symbol">:image</span> =&gt; <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> =&gt; <span class="instance-variable">blog.updated_at.to_time.iso8601, 

        :author => ‘Name’, 

        :section => blog</span>.categories.first.name, 
        <span class="symbol">:tags</span> =&gt; <span class="instance-variable">blog.categories.map(&:name).join(‘, ’) 

     }} 

Как я могу избавиться от этого?

Большое спасибо

+0

Избавьтесь от чего? –

+0

Привет, Его рендеринг blah вместо раскраски текста – Jan

ответ

0

Вы можете пройти через разметку 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#output-safety

+0

Спасибо, я принимаю этот ответ. Но я также использую '' 'textilize''' перед частью' '' CodeRay'''. Когда я добавлю следующее: '' 'textilize (sanitize CodeRay (« blahCode »,: ruby) .div''' Я получил тот же результат – Jan

+0

Зачем вам текстиль обрабатывать ваш код? Вы можете сделать:' sanitize textilize (CodeRay («blahCode»,: ruby) .div.html_safe) 'передать исходный вывод textilize –

+0

Hm. doesnt работал. Я просто хочу форматировать свой« обычный текст »и поместить некоторый код между ними. – Jan

Смежные вопросы