【訂正】Rails5.1のconfig.load_defaultsを利用しているとconfig/initializers/new_framework_defaults.rbの値は上書きされない(activerecord-session_store利用時)
訂正しました (2017/10/18)
どうやら、上書きされないのではなくて、下記の現象が起きていたようです。
まだどれが影響を与えているのかわかってないですが、他のRailsアプリだとちゃんと上書きされていました。。。
このアプリだけなにやってもActiveRecord::Base.belongs_to_required_by_defaultがnilになっていました。
> ActiveRecord::Base.belongs_to_required_by_default => nil > Rails.application.config.active_record.belongs_to_required_by_default => false
さらに追記
どうやらactiverecord-session-storeが原因みたい。
activerecord-session-storeを利用していると、config.load_defaults 5.1
ありでconfig/initializers/new_framework_defaults.rbにRails.application.config.active_record.belongs_to_required_by_default=false
を指定した場合は上書きされない。
> ActiveRecord::Base.belongs_to_required_by_default => true > Rails.application.config.active_record.belongs_to_required_by_default => false
config/application.rbにconfig.active_record.belongs_to_required_by_default=false
を書いた場合はちゃんと両方falseになる。
(initializersはgemの読み込み後に実行されるらしい
[config/application.rb] module アプリ名 class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 5.1 config.active_record.belongs_to_required_by_default = false # ここに直接書くとちゃんと上書きされる rails c > ActiveRecord::Base.belongs_to_required_by_default => false > Rails.application.config.active_record.belongs_to_required_by_default => false
activerecord-session_storeのバージョン
GIT remote: https://github.com/rails/activerecord-session_store.git revision: b5e7da210c937c0aa580b8094b64019cef20e95a
ちょっとはまったのでメモ。
[config/application.rb] module アプリ名 class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 5.1
のように、config.load_defaults 5.1
を記述すると
config/initializers/new_framework_defaults.rbにbelongs_to_required_by_defaultなどの設定を変更する記載があっても上書きはされない。
[config/initializers/new_framework_defaults.rb] # Require `belongs_to` associations by default. Previous versions had false. Rails.application.config.active_record.belongs_to_required_by_default = false
config/application.rbの後にconfig/initializers/new_framework_defaults.rbも読まれているので上書きされるのかと思っていたけど違うみたい。
下記にある通り、Railsが推奨する設定を使う場合にconfig.load_defaultsを利用するので上書きできなくてもいいんだと思うけど。