配列っぽい文字列をうまく配列に変換する
前提
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"]
Author And Source
この問題について(配列っぽい文字列をうまく配列に変換する), 我々は、より多くの情報をここで見つけました https://qiita.com/_miyachik/items/addf3766f0e0dd20f154著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .