v-crn Code Log

主に備忘録

NoMethodError | undefined method `offset' for #<Array:***> | Pagy

NoMethodError | undefined method `offset' for #<Array:***> | Pagy

状況

Pagyというgemを利用してページネーションを行うコードにおいてpagyメソッドに関する標題のエラーが発生しました。該当のコードは次のような構成です。

items = Post.where(['content LIKE ?', "%#{keyword}%"])
results = []
results += items 
@pagy, @items = pagy(items)

原因

pagyの引数はActiveRecord::Relationクラスに属している必要があります。たとえばallwhereの返り値のクラスがそれです。
今回のエラーは引数がStringの配列になっていたため発生していました。

解決策

引数をActiveRecord::Relationに変換します。

results.first.class.where(id: results.map(&:id))

一件落着!

参考

配列をActiveRecord::Relationで再取得するメソッドを作ってみる - Qiita