rails-observers cannot be required manually

TL;DR: As it is mentioned in the topic line, install and require it in Gemfile if you use rails (of coz).

I was supposed to use rails-observers gem to audit models' changes on particular case. So I added the gem into Gemfile but not require like this.

# Gemfile
gem 'rails-observers', require: false

# config/initializers/audit.rb
require 'rails-observers' if needed

It gave me an undefined method error but worked fine if omit the require: false part.

vendor/bundle/gems/activerecord-5.0.7/lib/active_record/dynamic_matchers.rb:21:in `method_missing': undefined method `instantiate_observers' for ActiveRecord::Base:Class (NoMethodError)

After digging into the rails-observers's code, it turns out that a few monkey patches will be done when active_record is loaded (https://github.com/rails/rails-observers/blob/v0.1.5/lib/rails/observers/railtie.rb#L6-L12) which happened before all self-defined initializers loaded (https://guides.rubyonrails.org/configuring.html#initializers).

So, as a result, require it at the beginning or let Gemfile do the requirement.

Additional, I found a good discussion on issue to read, if interested: https://github.com/rubygems/rubygems/issues/1104

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容