Hey,
I have a gem called ‘authorizer’ which does authorization for me. It has two observer classes that need to be added to the list of ActiveRecord observers:
config/environment.rb:
require “authorizer/user_observer”
require “authorizer/object_observer”
config.active_record.observers = “Authorizer::UserObserver”, “Authorizer::ObjectObserver”
This gives me the error:
`load_missing_constant’: uninitialized constant Authorizer::ActiveRecord (NameError)
This problem is solved by copying the gem’s source files into the lib/ folder or by using a plugin. But I don’t want that. How can I ensure the gem is loaded AFTER the Rails framework is loaded?
This is on Rails 2.3.11
All the best,
CmdJohnson
rab
(Rob Biedenharn)
July 2, 2011, 1:55pm
2
I’m not sure if this works when you have to reference the ‘config’ object, but you can wrap code inside a block and use the #after_initialize method:
config.after_initialize do
config.active_record.observers = “Authorizer::UserObserver”, “Authorizer::ObjectObserver”
end
-Rob
Rob Biedenharn
Rob@AgileConsultingLLC.com http://AgileConsultingLLC.com/
rab@GaslightSoftware.com http://GaslightSoftware.com/
Thanks Rob. That almost fixed it. Solution is this:
Create a file called rails/init.rb
Put this in it:
config.after_initialize do
ActiveRecord::Base.observers << Authorizer::UserObserver
ActiveRecord::Base.observers << Authorizer::ObjectObserver
end
No more need for the user to mess with config/environment.rb.
I found it thanks to
http://riotprojects.com/post/106808946/activerecord-observers-in-gems-plugins
It also works fine in development mode. Because of the post from Riotproject I was expecting trouble, but this hasn’t occurred.