(active_adminで)strong_paramsに*User.column_namesを使ってエラー

active_adminデビューしました。
rails4からマスアサインメント脆弱性の対策である、strong_paramsがデフォで入ってます。
なので、controller周りを使うライブラリ(deviseとかactive_adminとか)には、どの項目をブロックするのか通すのかを明示しなくていけない。
管理画面とか身内が使うアプリケーションに関しては、全項目でええじゃろがい!という思いがあるけど、やっぱり明示しないといけない仕様のようですだ。

それで、どうせ全項目なので*User.column_namesで更新を許可する項目を指定したら、次のrake dbコマンドでエラーになるようになっちゃったよ。

# app/admin/user.rb  に strong_paramsの許可する項目を書く
ActiveAdmin.register User do
  permit_params(*User.column_names)
end

↓次のrake dbコマンド

$ bundle exec rake db:drop
$ bundle exec rake db:create
$ bundle exec rake db:migrate  
rake aborted!
ActiveAdmin::DatabaseHitDuringLoad: Your file, app/admin/user.rb (line 2), caused a database error while Active Admin was loading. 
This is most common when your database is missing or doesn't have the latest migrations applied. To prevent this error,
move the code to a place where it will only be run when a page is rendered. 
Original error message: Mysql2::Error: Table 'antena_development.momiji_users' doesn't exist: SHOW FULL FIELDS FROM `users`

原因は、migrateの実行でrailsアプリ読み込み中、
(app/admin/user.rbにある)*User.column_namesメソッドでデータベースを参照してたらそんなテーブルないよ!ということでした。
migrate前にusersテーブルはないもんね。クラスロードする時にクラスマクロを評価するみたい。


active_adminの所感。
コマンド1個うつだけでリソースのCRUD画面がされるのがいいですね。
ただ、外部キーの項目は「オブジェクトがto_sされた」セレクトボックスで表示されていたり、画面幅無視で横長とかちょこちょこメンテが必要な印象でした。
なので手抜き管理画面でいいなら是非使って行きたいと思いました。