はじめに
この記事は、エンジニア経験1年の大学生が実務で勉強になったこと、詰まったことをまとめています。間違っている箇所などがございましたら、指摘していただけると幸いです。
※モデル名やプロパティ名など詳細につきましては、架空のものに変更しております。
前提
- Ruby: 2.7.5
- Rails: 5.2.4.6
- Neo4j: 9.2.4
経緯
実務では社内で使用するツールの開発に携わっており、「データを更新することができない」と報告があった。原因を調査していくと、特定の文字列を含むURLを入力することで、データの更新ができないことがわかった。
そこで、ビジネスの方と話し合い、バリデーションを追加することになった。既存のデータにも特定の文字列を含むURLが存在するため、rakeタスクで該当の文字列を含むURLを削除することになった。
ただ、その該当の文字列を含むURLを取り出すことに詰まった。
失敗した方法
[1] pry(main)> Company.as(:c).where("c.links =~ '.*/hogehoge/.*'")`
railsコンソールを立ち上げ、該当のデータを取得できるか確認した。だが、このクエリでは取得することができなかった。
理由は、links
プロパティが配列だったので、取得することができなかった。
解決した方法
[1] pry(main)> Company.as(:c).where("any(x in c.links where x =~ '.*/hogehoge/.*')")
上記のコマンドで取得することができた。
まとめ
配列のプロパティで特定の文字列を含むものを取得する方法はなかなか調べても出てこなかったので、とても苦労しました。今回のような問題に詰まった方に少しでも参考になればと思い、この記事を書きました。間違っていたり、もっと良い方法などがございましたら、コメントなどいただけると幸いです。