別に大した話じゃないんだけれど、これもメモ。
Elasticsearchのindexを作って、データをインポートします。
その際に、スコープを渡せるようにしてあります。
インポート後にindexをリフレッシュするので、即テストが可能です。
def elasticsearch_import_data(model_klass, scope=nil) model_klass.__elasticsearch__.create_index!(force: true) model_klass.import(query: scope) model_klass.__elasticsearch__.refresh_index! end
使い方はこう。
describe Shop, type: :model do before do pref = Pref.create(name: '岡山県') Shop.create!(name: "Shop A", yomigana: 'ショップエー', pref: pref) Shop.create!(name: "Shop B", yomigana: 'ショップビー', pref: pref) elasticsearch_import_data(Shop, -> { eager_load(:pref) }) end # テストを書く end
importでスコープが渡せるので、Elasticsearchにデータを取り込む時にN+1問題が発生しなくて済みます。