LoginSignup
0
0

More than 3 years have passed since last update.

Ruby deleteの罠

Posted at

背景

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の前半を無駄にした。。。

0
0
1

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
0
0