はじめに
掲示板のアプリケーション等、特定の文字部分(>>3
等)を<a></a>
として認識させる方法をメモφ(..)
↓イメージはこういう感じ
やりかた
今回は>>数字
を返信用の文字列として扱い、<a></a>
でページ内リンクを貼るケースを想定してますφ(..)
- 文字列全体を
h
メソッドを使ってエスケープ - エスケープされた文字列の返信用文字列
>>
を>>
に置換 >>数値
部を抽出し、リンク用のHTMLを生成し本文に埋め込む- 出力側のViewで
html_safe
で出力
実際のソースコード
hoge_helper.rb
def format_comment(content) # 返信用の文字列を定義 reply = { char: '>>', escaped: '>>' } # コメント本文のHTMLをエスケープ後、返信用の文字列のみをHTMLとして再定義 content = h(content).gsub(reply[:escaped], reply[:char]) # 返信先リンク部の取得 content_arry = content.split(" ") target = content_arry.select{ |c| c.include?(reply[:char]) } target.each do |t| # 返信先リンクHTMLの生成 to = t.match(/#{reply[:char]}\d+/).to_s link_html = link_to to, "#comment_#{to.gsub(reply[:char], '')}" # 本文の返信部を返信先リンクHTMLで置換 content = content.gsub(to, link_html) end content end
index.html.erb
<p><%= format_comment(comment.content).html_safe %></p>
以上