@thorikiriのてょりっき

@thorikiriがWebとかAndroidとかの技術ネタや本を読んだブログです

RailsAdminとconcern modulesを共存させる

RailsAdminって便利ですね。管理が非常に楽になります。
RailsAdminを使っていたところに、concern modulesを組み込んでみました。
すると、今まで動いていたRailsAdminが動かなくなるという現象が発生しました。

RuntimeError in RailsAdmin::MainController#dashboard
Circular dependency detected while autoloading constant Concerns::Hogehoge

Extracted source (around line #6):
    previous_level = Rails.logger.level
    Rails.logger.level = Logger::ERROR if env['PATH_INFO'].index("/assets/") == 0
    call_without_quiet_assets(env).tap do
      Rails.logger.level = previous_level
    end
  end

Rails.root: /path/to/railsapp

Application Trace | Framework Trace | Full Trace
config/initializers/quiet_assets.rb:6:in `call_with_quiet_assets'
Request

ぐぐったら、こちらに行き着きました。
Circular dependency detected while autoloading constant · Issue #1697 · sferik/rails_admin · GitHub

config/initializers/rails_admin.rbに次の定義を行えば解決出来るとのことです。

# Include specific models (exclude the others):
Rails.application.eager_load!
config.included_models = ActiveRecord::Base.descendants.map!(&:name)

で、実際に解決しました。
RailsAdminではデータベースのテーブルの管理が出来るのですが、その対象をActiveRecordのクラスを見て設定しているようです。
app/modelsの中のファイルを見ているのですが、app/models/concernsの中身も見てしまいます。
そこで、ActiveRecordのサブクラスだけですよ。と指定しているんですね。
とりあえず解決してめでたしめでたしでした。