Как я могу использовать RedCarpet без CodeRay для реализации уценки в моих блогах?

Поэтому я терпеливо пытался какое-то время работать с гемом CodeRay, чтобы реализовать уценку в моих блогах. Какое-то время это работало, но потом ломало страницу моего блога с ошибкой 500.

CodeRay.scan был определен как виновник:

class CodeRayify < Redcarpet::Render::HTML
        def block_code(code, language)
            CodeRay.scan(code, language).div
        end
    end

но даже после того, как я реорганизовал код, чтобы он выглядел так:

class CodeRayify < Redcarpet::Render::HTML
        def block_code(code, language)
            CodeRay.scan(code, language || :text).div
        end
    end

У меня все еще остается та же проблема, даже несмотря на то, что я проверяю, что у меня нет обратных галочек в начале предложения, и что я правильно внедряю уценку в своих блогах.

Я получаю такие ошибки:

2017-11-28T23:22:11.456525+00:00 app[web.1]: I, [2017-11-28T23:22:11.456458 #4]  INFO -- : [d03d5e9e-c3c3-4117-85db-d80bd30d9178] Completed 500 Internal Server Error in 38ms (ActiveRecord: 8.5ms)
2017-11-28T23:22:11.457321+00:00 app[web.1]: F, [2017-11-28T23:22:11.457251 #4] FATAL -- : [d03d5e9e-c3c3-4117-85db-d80bd30d9178]
2017-11-28T23:22:11.457384+00:00 app[web.1]: F, [2017-11-28T23:22:11.457321 #4] FATAL -- : [d03d5e9e-c3c3-4117-85db-d80bd30d9178] ActionView::Template::Error (Invalid id given: console.log("Hello!");```):
2017-11-28T23:22:11.457592+00:00 app[web.1]: F, [2017-11-28T23:22:11.457534 #4] FATAL -- : [d03d5e9e-c3c3-4117-85db-d80bd30d9178]     4:
2017-11-28T23:22:11.457593+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178]     5:     <% render partial: 'blogs/admin_actions', locals: {blog: blog} %>
2017-11-28T23:22:11.457595+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178]     6:
2017-11-28T23:22:11.457595+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178]     7:     <p><% markdown blog.body %></p>
2017-11-28T23:22:11.457596+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178]     8:
2017-11-28T23:22:11.457597+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178]     9:  </div><!-- /.blog-post -->
2017-11-28T23:22:11.457648+00:00 app[web.1]: F, [2017-11-28T23:22:11.457586 #4] FATAL -- : [d03d5e9e-c3c3-4117-85db-d80bd30d9178]
2017-11-28T23:22:11.457718+00:00 app[web.1]: F, [2017-11-28T23:22:11.457654 #4] FATAL -- : [d03d5e9e-c3c3-4117-85db-d80bd30d9178] app/helpers/blogs_helper.rb:8:in `block_code'
2017-11-28T23:22:11.457719+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178] app/helpers/blogs_helper.rb:23:in `render'
2017-11-28T23:22:11.457720+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178] app/helpers/blogs_helper.rb:23:in `markdown'
2017-11-28T23:22:11.457721+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178] app/views/blogs/_blog.html.erb:7:in `_app_views_blogs__blog_html_erb__2572357733169721276_60667300'
2017-11-28T23:22:11.457721+00:00 app[web.1]: [d03d5e9e-c3c3-4117-85db-d80bd30d9178] app/views/blogs/index.html.erb:5:in `_app_views_blogs_index_html_erb__3522254122931434539_63043240'

Вот как я пишу уценку в своем блоге Javascript:

Below are examples of four primitive data types that lay the foundation for all JavaScript programs. Primitive data types, as their name implies, are the simplest built-in forms of data. For example:

```javascript
console.log('New York City');
console.log(40.7);
console.log(true);
console.log(null);
```

Это правильный способ сделать это, почему я получаю ошибку? Судя по бревнам героки в прошлом, это проблема:

CodeRay.scan(code, language).div

но даже если я изменю это на это:

CodeRay.scan(code, language || :text).div

У меня все та же проблема. Поэтому мне интересно, как я могу просто внедрить RedCarpet в этот код ниже без CodeRay:

module BlogsHelper
    def gravatar_helper user
        image_tag "https://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(user.email)}", width: 60
    end

    class CodeRayify < Redcarpet::Render::HTML
        def block_code(code, language)
            CodeRay.scan(code, language || :text).div
        end
    end

    def markdown(text)
        coderayify = CodeRayify.new(filter_html: true, hard_wrap: true)

        options = {
            fenced_code_blocks: true,
            no_intra_emphasis: true,
            autolink: true,
            lax_html_blocks: true,
        }

        markdown_to_html = Redcarpet::Markdown.new(coderayify, options)
        markdown_to_html.render(text).html_safe
    end

    def blog_status_color blog
        'color: red;' if blog.draft?
    end
end

1 ответ

Решение

Возможно, проблема не в Coderay или RedCarpet. Это может быть просто проблема с данными. Эта ошибка ActionView::Template::Error (Symbol or String expected, but NilClass given.) означает, что он ожидает контент, но не получает его вообще, поэтому это может быть проблема с проверкой данных или что-то в этом роде.

Поэтому вам может потребоваться устранить проблему с проверкой данных или использовать альтернативу, например CKEditor.

Другие вопросы по тегам