背景
Ruby on Railsで配列操作をしようとした時に思いがけない罠にハマったので、
メモとして残しておく
実現したいこと
DataSourceモデルの中に
"a", "b", "c", "d"というカラムが存在するときに、
"c"だけを除外してそれ以外のカラムのデータのみを取り出す
やってしまったミス
下記のようにコーディングしていた
DataSource.select(DataSource.column_names.delete("c"))
しかし、このコードではArray#deleteの思わぬ罠があった。
参考:https://docs.ruby-lang.org/ja/latest/method/Array/i/delete.html
array = [1, 2, 3, 2, 1]
p array.delete(2) #=> 2
p array #=> [1, 3, 1]
つまり、
DataSource.column_names #=> ["a", "b", "c", "d"]
DataSource.column_names.delete("c") #=> "c"
となってしまっており、実質
DataSource.select("c")
と同じ挙動になってしまっていた。
解決策
これで元々実現したかったことが実現できる
columns_without_c = DataSource.column_names
columns_without_c.delete("c")
DataSource.select(columns_without_c)
```
## 所感
これを探すだけで12時間くらいかけてしまいました。。。
GWの前半を無駄にした。。。