Help us understand the problem. What is going on with this article?

[Rails] ActiveRecord::import で NoMethodError: undefined method `raise_record_invalid' が発生したときの対応

はじめに

ActiveRecord を使ってDBアクセスをしている場合、バルクインサートをやってくれる gem に activerecord-import というのがある。
とても便利なライブラリなのだが、RSpec で ActiveRecord::RecordInvalid の発生を期待するテストを書いた際に当該エラーが発生しなかったので備忘録として残す。

環境

バージョン 備考
Ruby v2.5.5p157
Ruby on Rails v5.2.3
activerecord-import v0.14.1 バルクインサートをやってくれる

なにが発生したか

前述のとおり ActiveRecord::RecordInvalid が発生するテストを書いたのだが、次のエラーが発生した。

expected ActiveRecord::RecordInvalid, got #<NoMethodError: undefined method `raise_record_invalid' for

結論から

この現象の解決には activerecord-import の update を行う。( 下記のバージョンを指定して bundle install を実行する )

gem 'activerecord-import', '~> 0.15.0'

発生していた理由

activerecord-import のバグ。下記で fix の報告があった。

https://github.com/zdennis/activerecord-import/pull/294

まとめにかえて

上記のプルリクエストがマージされたのは on 3 Jul 2016 と古い。

スクリーンショット 2020-02-21 12.22.46.png

そういうわけなので、最近導入した方は本記事で取り上げた現象は発生していないと思われるが、導入したのが古いバージョンのままで更新をかけていないとハマるのでご注意を。

なんせ ActiveRecord::import, ActiveRecord::RecordInvalid, NoMethodError, undefined method raise_record_invalid といったキーワードで検索かけても全然糸口が見つからない。
そんななか、検索でひっかかった こちら前掲のプルリクエストがあって気づけたのは幸いでした。。。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした