RoadMovie

write down memos or something I found about tech things

【rails3】DBでは改行できているのにテンプレート(view)でうまく表示されない際の解決法

フォームで改行ありの文章を入力→DBでselect文投げて確認→改行できてる!

となっているのに、テンプレートで呼び出してみると半角空白になっていたりする場合の解決法。

 

まず一番重要なのは使っているRailsのバージョン。

Rails2であれば「rails 改行 表示」などでググればたくさんでてきます。

一応Rails2での解決策は下記の通り

def hbr(str)
  str = html_escape(str)
  str.greb(/\r\n|\r|\n/, "<br />")
end

 

私も上記のようなやり方をたくさん発見してトライしたのですが、まったくうまくいかない、、

<br />タグがそのまま表示されてしまいました。

 

その原因は先程も書いたようにRailsのバージョン。

Rails3では標準で<%= %>の中身がHTMLエスケープされるようになったようで改行タグがそのまま表示されてしまいます。

 

ということで、Rails3の場合は下記のやり方で解決出来ます。

def hbr(str)
    h(str).gsub(/(\r\n?)|(\n)/, "<br />")
  end

テンプレートの記述は

<%=hbr @variable %>

の様な形でやればいけます。