初めての投稿になります。

記事内の間違いをご指摘をいただき記事を修正させていただきました。
よく確認をせず間違った情報を記載してしまい、大変申し訳ありませんでした。

問題のコード

qiita.rb
picture_ids = params[:post][:content].scan(/image(\d+)/)

picture_ids.each do |id|
  url = Picture.find_by(id: id).file
  params[:post][:content] = params[:post][:content].gsub(/\[image#{id}\]/, "<img src='#{url}' >")
end

[image4]など[image(数字)]の部分を抜き出したかったのですが、
これだと、[image#{id}]の部分が機能してくれませんでした。

原因

実はscanメソッドで返される配列の形が
[["4"],["5"]]のようになっていました。
これは、scanメソッドを利用する際に、正規表現内で()を利用していた為っぽいです。

qiita.rb
picture_ids = params[:post][:content].scan(/image(\d+)/)

ここでいうと  /image(\d+)/の(\d+) の部分ですね
scanメソッドの正規表現内で()を使って、当てはまる部分を取得すると、配列の配列として返されるらしいです。

解決策

qiita.rb
picture_ids = params[:post][:content].scan(/image(\d+)/)

picture_ids.each do |id|
  url = Picture.find_by(id: id).file
  params[:post][:content] = params[:post][:content].gsub(/\[image#{id[0]}\]/, "<img src='#{url}' >")
end

これで、うまく機能してくれました。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.