Redcarpet降价渲染两个不同的textareas

时间:2014-07-14 12:43:56

标签: ruby ruby-on-rails-3 ruby-on-rails-4 markdown redcarpet

我想我错过了某个地方。

我让渲染器使用原始文本区域(内容)工作了一段时间,现在已经为模型(正文)添加了一个新列。我添加了所有内容并且表单有效,视图显示了正文输入,但是markdown不会呈现。

所以这是我的应用程序助手:

def markdown(content)
 @markdown ||= Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, space_after_headers: true, fenced_code_blocks: true)
 @markdown.render(content)
end

def markdown(body)
 @markdown ||= Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, space_after_headers: true, fenced_code_blocks: true)
 @markdown.render(body)
end

def title(page_title)
 content_for :title, page_title.to_s
end

我的节目观点:

=title @portfolio.title 

.container.pushdown.img-responsive
 .row
  .col-md-2
        %br
        %p= link_to 'Back', portfolios_path
    .col-md-8
        %h2
            = @portfolio.title

        %p
            =markdown(@portfolio.body).html_safe
        %p
            =markdown(@portfolio.content).html_safe
        %br
        %br

我收到以下错误:

wrong argument type nil (expected String)

2 个答案:

答案 0 :(得分:1)

您的markdown方法需要一个字符串。如果您使用nil调用它,则会抛出此错误。

您可能希望将代码更改为此类代码以处理nil值:

def markdown(string)
  @markdown ||= Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, space_after_headers: true, fenced_code_blocks: true)
  @markdown.render(string.to_s)
end

此外,您有两种相同的方法。您可以删除其中一个。

答案 1 :(得分:0)

错误可能来自

=title @portfolio.title

与降价渲染无关。调用该函数的预期签名是:

def title(page_title)

此外,+1有两个相同的方法(第一个只是被第二个覆盖。)