質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.49%

gem ‘redcarpet’導入でundefined method `markdown' for #が解決できない。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 873

score 20

初めに

初学者でアウトプットのためRrailsアプリを作成中です。
新たに作成したアプリでmarkdown記法を導入しようとするとエラーが発生。
対処いたしましたが解決できず質問させて頂きます。

実現したいこと

markdown記法を導入(markdown記法を用いて投稿できる)
(例) topic詳細ページで本文に掲載される文字がリンクになっている。
Markdown記法 チートシート

開発環境

  • macOS Catalina(ver:10.15.3)
  • localhost:3000
  • ruby 2.6.3p62
  • Rails 5.2.4.2

作業手順

  • gem ‘redcarpet’導入(version指定なし)
  • app/helpers/の配下にmarkdown_helper.rbを作成
  • topics/show.html.hamlに
    「%span  %div=markdown(@topic.text)」を記載。

エラー内容

  • 発生場所:topics/show.html.haml
  • 指摘箇所:%div=markdown(@topic.text)
  • ブラウザに表示された文章
NoMethodError in Topics#show
undefined method `markdown' for #<#<Class:0x00007fcd0bf21388>:0x00007fcd0b6fafd8>
Extracted source (around line #15):
13   %td=simple_format(@topic.text)
14   %span 
15     %div=markdown(@topic.text)
16
17  - if user_signed_in?
18    .btn-box
  • ターミナル
ActionView::Template::Error (undefined method `markdown' for #<#<Class:0x00007fcd0bf21388>:0x00007fcd0b6fafd8>):
12   %th 本文
13   %td=simple_format(@topic.text)
14   %span 
15     %div=markdown(@topic.text)
16
17  - if user_signed_in?
18    .btn-box

app/views/topics/show.html.haml:15:in `_app_views_topics_show_html_haml__2460972605116606340_70259318447120'
Started POST "/__web_console/repl_sessions/084a5664894d712322fdcb7f89389d96/trace" for ::1 at 2020-04-24 16:08:53 +0900

やったこと

redcarpetの使い方を調べ直す(下記サイトなど・・・etc)

*Git Hub公式
*【Railsでマークダウン】Gem「redcarpet」を使ってRailsにMarkdownを実装
*[Rails] Markdown形式で入力できるようにしてみた(シンタックスハイライトも対応)
*RailsにMarkdown導入してプレビュー表示させるまで

調べた内容を基にmarkdown_helper.rbの書き換え

  • markdownに@を付けるor付けないを試す
  • unlessの条件分岐をなくす
  • bundle installとrails sを再度行う

コード

[test/helper/markdown_helper.rb]
module MarkdownHelper
  require "redcarpet"
  def markdown(text)
    unless @markdown
      options = {
        hard_wrap: true
      }
      extensions = {
        no_intra_emphasis: true,
        tables: true,
        fenced_code_blocks: true,
        autolink: true,
        quote: true
      }
      renderer = Redcarpet::Render::HTML.new(options)
      @markdown = Redcarpet::Markdown.new(renderer, extensions)
    end
    @markdown.render(text).html_safe
  end
end
[views/topics/show.html.haml]
.main__contents__topic
  .topic-text
    = link_to root_path do
      %h3 Topic詳細
  .topic-table
    %table
      %tbody
        %tr
          %th タイトル
          %td= @topic.title
        %tr
          %th 本文
          %td=simple_format(@topic.text)
          %span 
            %div=markdown(@topic.text)

  - if user_signed_in?
    .btn-box
      .btn-box__edit
        = link_to '投稿の編集', edit_topic_path(@topic)
      .btn-box__delete
        = link_to '投稿の削除', topic_path(@topic),method: :delete, data: { confirm: "本当に削除しますか?" }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

調べた内容を基にmarkdown_helper.rbの書き換え

test/helper以下に置いていては、テストの際にしか読み込まれません。app/helpers以下に置いてください(設定によっては、コントローラーでinclude MarkdownHelperが必要かもしれません)。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/04/24 17:44 編集

    maisumakun様

    早急な回答ありがとうございます。
    ヘルパーメソッドを作る場所を間違えており、
    全く気付いておりませんでした。
    以後気をつけます。

    なおコントールへの記載は入りませんでしたが、
    追記する場合は該当viewのコントローラーに

    class xxxController < ApplicationController
    include MarkdownHelper


    と記載するということでしょうか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る