0

我想我在某处遗漏了一些东西。

我让渲染器使用原始文本区域(内容)工作了一段时间,现在已经向模型(正文)添加了一个新列。我已经添加了所有内容并且表单有效,视图显示了正文输入,但 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)
4

2 回答 2

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

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

于 2014-07-14T13:14:13.240 回答
0

错误可能来自

=title @portfolio.title

和markdown渲染无关。调用函数的预期签名是:

def title(page_title)

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

于 2014-07-14T13:17:05.860 回答