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

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

ただいまの
回答率

90.38%

  • Ruby

    9903questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    9315questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

gem redcarpetでのマークダウン記法が使えない。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,318

Taka624

score 32

gemfilegem 'redcarpet' bundle installし、

schemafile

create_table "renewals", force: :cascade do |t|
  t.string "title"
  t.text "content"
end

上記のモデルを作成し、

application_helper.rb

def markdown(text)
        options = {
          filter_html:     true,
          hard_wrap:       true, 
          link_attributes: { rel: 'nofollow', target: "_blank" },
          space_after_headers: true, 
          fenced_code_blocks: true
        }

        extensions = {
          autolink:           true,
          superscript:        true,
          disable_indented_code_blocks: true
        }

        renderer = Redcarpet::Render::HTML.new(options)
        markdown = Redcarpet::Markdown.new(renderer, extensions)

        markdown.render(text).html_safe
end

というようにヘルパーに記述し、

renewals_controller.rbに

class RenewalsController < ApplicationController

  def index
    @renewal = Renewal.all
  end
  def new
    @renewal = Renewal.new
  end
  def create
    @renewal = Renewal.create(renewal_params)
    redirect_to action: 'show', id: @renewal.id
  end
  def show
    @renewal = Renewal.find(params[:id])
  end
  def edit
    @renewal = Renewal.find(params[:id])
  end
  def update
    @renewal = Renewal.find(params[:id])
    @renewal.update_attributes(renewal_params)
    redirect_to action: 'show', id: @renewal.id
  end

  private
  def renewal_params
    params.require(:renewal).permit(:title, :content)
  end

end

のように記述し、

views/renewals/show.html.erbに

<h1><%= @renewal.title %></h1>
<p><%= markdown(@renewal.content) %></p>
<%= link_to "ニュース一覧に戻る", renewals_path %>

と書いています。
renewlas/newページでマークダウン記法を用いたtextを入力して、showページで見ようとすると、出力がされないようです。

なにか特別な処理が必要でしたでしょうか。

ルーティングは、
  resources :renewals の記述のみでや新規の記事作成、編集、一覧表示、個々の記事ページ表示などはできており、
<%= markdown(@renewal.content) %>によって出力されるのは、マークダウンのために記入していた##などのものは覗かれたものになります。
例えば、「##マークダウン」などと入力すると、その表示は「マークダウン」となり、「##」は無視されます。

うまく出力するにはどうしたらいいでしょうか。

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

例えば、「##マークダウン」などと入力すると、その表示は「マークダウン」となり、「##」は無視されます。

これは無視されている訳ではなく,マークダウンが働いて,文字が強調されているのではないでしょうか。
試しに#を一つにして文字の大きさが変わらないかどうか確認してください。
こちらの環境で同じコード問題なく動作したので,もし解決しなかったら再現する手順を教えるので返信
お願いいたします。

いろいろ検証した結果optionで有効なマークダウンの動作を変えられるようですね。

その1

質問者様のコードをオプションいじって実行してみたのが以下です。

その2

実行した手順は,

  1. Gemfileに gem 'redcarpet' を追加
  2. rails g scaffold renewal title:string content:text
  3. markdown関数をapplication_helper.rbに追加
  4. テキストをフォームで保存してshowに遷移させる。

その1の実行は質問者様のコードを全くいじっていません。
なので,うまくいかないとすれば,routes.rbの設定が
一番怪しいと思います。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/04/19 15:11

    htmlタグに変換されるのは正常な動作ですね。
    redcarpetの問題ではないみたいです。h1タグは普通デフォルトでブラウザでスタイルが当てられているタグなので,自分でスタイルを当ててるとかでなければブラウザの問題かもしれませんね。念のためブラウザのデバッグツールでDOMに当たっているスタイルを確認してください。
    普通はuser agent stylesheetというのがあてられているはずです。

    キャンセル

  • 2016/04/19 17:06

    developerツールで確認したところ、フロントエンドの開発者がスタイリングしやすいように、デフォルトではh1もpもすべて同じ文字のサイズになるように指定していたためこのようになっていたようです。

    原因が完全に判明でき、本当に助かりました。
    基本的な部分でつまずいていたのに何度も質問させていただいて本当に有難うございました。

    pry-byebugの使い方やApplicationController.helpers.markdownのやり方なども勉強になりこれからも有効活用していきます!
    繰り返しになりますが本当にありがとうございました!!!!

    キャンセル

  • 2016/04/19 21:03

    なるほど!解決したようで何よりです。

    キャンセル

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

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

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

  • Ruby

    9903questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    9315questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。