【问题标题】:NoMethodError in Discussions#show讨论中的 NoMethodError#show
【发布时间】:2019-10-28 14:07:44
【问题描述】:

以下是从我的文件app/views/discussions/show.html.erb 中提取的代码,其中第 16 行引发了此错误:

undefined method `markdown' for #<#<Class:0x000000000c94e0d8>:0x000000000c94c6e8>
s<div class="columns">
  <div class="column is-8">
    <h1 class="title is-2 has-text-grey discussion-title"><%= @discussion.title %></h1>
    <h3 class="subtitle is-5 has-text-grey-lighter">by <%= @discussion.user.username %> in <%= link_to @discussion.channel.channel, @discussion.channel %></h3>
    <div class="level">
      <div class="level-left"></div>
      <div class="level-right">
        <% if  discussion_url(@discussion) %>
        <div class="buttons">
            <%= link_to 'Edit Discussion', edit_discussion_path(@discussion), class:'button'%>
            <%= link_to 'Delete', discussion_path(@discussion), method: :delete, data: { confirm: "Delete discussion?" }, class:'button' %>
        </div>
        <% end %>
      </div>
    </div>
    <div class="content"><%= markdown (@discussion.content) %></div>
    <!--                     ^^^^^^^^                            -->

    <h2 class="subtitle is-5 has-text-grey"><%= @discussion.replies.count %> Replies</h2>

    <div id="discussion-replies">
      <%= render @discussion.replies %>
    </div>

    <hr/>

    <h3 class="subtitle is-3 has-text-grey">Leave a reply</h3>
    <% if user_signed_in? %>
      <%= render 'replies/form' %>
    <% else %>
    <p>To reply you need to <%= link_to 'login', new_user_session_path %>. Don't have an account?
      <%= link_to 'Sign up', new_user_registration_path %> for one.</p>
    <% end %>

  </div>

    <%= render 'sidebar' %>

</div>

无法查看回复或评论部分

【问题讨论】:

  • 你用的是哪个 gem?
  • Rails 默认不提供markdown 方法。所以@SamyKacimi 假设您正在使用一些 gem 或自定义代码来让事情正常工作。
  • 我用过 'redcarpet', '~> 3.5' ,看下面的答案好像我得自己写个帮手

标签: ruby-on-rails ruby


【解决方案1】:

Rails 不包含markdown 方法。您必须使用 gem,自己编写一些东西或两者的组合。例如,您可以使用 redcarpet gem 或其他 markup processor gems 之一。

然后使用这个 gem 编写你自己的助手。

# app/helpers/markdown_helper.rb
module MarkdownHelper
  MARKDOWN = Redcarpet::Markdown.new(Redcarpet::Render::HTML)

  def markdown(markdown_string)
    MARKDOWN.render(markdown_string).html_safe
  end
end

有关用法和可能的渲染配置,请查看redcarpet documentation

有了这个助手,您可以在视图中简单地执行以下操作:

<%= markdown(@discussion.content) %>

【讨论】:

  • 我确实使用了 'redcarpet', '~> 3.5' 但没有写任何帮助程序,非常感谢,如果发生任何事情会告诉你
  • 您不必使用助手,但编写&lt;%= raw Redcarpet::Markdown.new(Redcarpet::Render::HTML).render(@discussion.content) %&gt; 可能有点麻烦,这是使用默认选项。如果你想改变任何渲染选项,这条线只会越来越长。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多