LoginSignup
1
0

More than 5 years have passed since last update.

Rubyのscanメソッドで引っかかった話

Last updated at Posted at 2018-05-08

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

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

問題のコード

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

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

1
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0