2013-05-07 2 views
1

Ruby: 2.0.0p0, Rails: 3.2.13, redcarpet: 2.2.2
application_helper.rbredcarpet-2.2.2 не приходит содержание

def markdown(text)                          
markdown_render = Redcarpet::Render::HTML.new(:hard_wrap => true, :no_styles => true) 
markdown = Redcarpet::Markdown.new(markdown_render, :autolink => true, :no_intro_emphasis => true) 
markdown.render(text).to_html.html_safe 
end 

app/views/questions/new.html.erb

<%= simple_form_for @question do |f| %> 
<%= f.input :title, :input_html => { :class => "span6" } %> 
<%= markdown(@question.content) %> 
<%= f.button :submit, :class => 'btn-primary' %> 
<%= link_to 'Cancel', @question.id.blank? ? questions_path : question_path(params[:question]), :class => "btn btn-danger" %> 
<% end %> 

Но наступает ошибка: wrong argument type nil (expected String), затем я изменил <%= markdown(@question.content) %> на <%= markdown(@question.content.to_s) %>, тогда приходит эта ошибка: undefined methodto_html' for "":String, поэтому я изменил markdown.render(text).to_html.html_safe на markdown.render(text).html_safe в application_help.rb, и он просто имеет поле ввода заголовка, поле ввода содержимого пропустило.
Как я могу исправить эту проблему, и если вам нужна дополнительная информация, сообщите мне.

ответ

2

Попробуйте следующий помощник:

def markdown(text) 
    if text.blank? 
    nil 
    else 
    markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true) 
    markdown.render(text) 
    end 
end 
+0

Я не пользователь Redcarpet. Я должен угадать. Попробуйте новую версию, которую я только что редактировал. Кажется, вам не нужна часть to_html. – wintermeyer

+0

Да, вы правы. Я удалил часть to_html, и она работает. – zjhui

0

Это работало для меня на Rails 4.1.0.

Поместите следующее приложение/хелперов/application_helper.rb:

def markdown(text) 
if text.blank? 
    nil 
else 
    markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true, filter_html:  true, hard_wrap: true, link_attributes: { rel: 'nofollow', target: "_blank" }, space_after_headers: true, fenced_code_blocks: true, superscript: true, disable_indented_code_blocks: true) 
    markdown.render(text).html_safe 
    end 
end 

Подумайте только разница положить .html_safe к концу