18
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

配列っぽい文字列をうまく配列に変換する

Last updated at Posted at 2016-11-08

前提

databaseに配列っぽい括弧でくくられたただの文字列があります。
["hoge","fuga"]
でもいざRails内でmodelを通して取り出すとこんな形になってます。
"[\"hoge\",\"fuga\"]"
つらい

標準メソッドでどうにかならないか

https://docs.ruby-lang.org/ja/latest/class/Array.html
結論:ならない(っぽい)

Array.new(["hoge","fuga"]) のような形ならどうにかなるのですが( []もArrayなので当たり前)、今回のケースの場合はmodelから取り出した時点で文字列なのでうまいことやらないと配列にはキャストできません。
当然Stringに.to_aryメソッドはありませんのでArray.try_convertもnilが返ります。

結論

結論としては、splitで無理やり分割し、deleteで余分な文字列を消すことにより強制的に配列にしました。このケースで対応できない場合もあるかもしれませんが、その際はうまくやりましょう。

[1] pry(main)> hoge = model.column
=> "[\"hoge\",\"fuga\"]"
[2] pry(main)> hoge_a = hoge.split(',').map { |m| m.delete('[]"\\\\')}
=> ["hoge", "fuga"]

僕はあまりやりたくありませんが、evalでやる方法もあります。こっちの方が綺麗ですがevalなのであしからず。

[1] pry(main)> hoge = model.column
=> "[\"hoge\",\"fuga\"]"
[2] pry(main)> hoge_a = eval(hoge)
=> ["hoge", "fuga"]

18
15
4

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
18
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?