Autoloading models?
Closed this issue · 5 comments
Is there anything special required to autoload models in the 'app/models' directory of an engine? I've got spec/internal setup according the readme, but I'm getting uninitialized constant MyModelName
when I try to run any model specs. Are there any special configs required? I've got Combustion.initialize! :all
in my spec_helper.
Hi Asher
It's certainly possible to have models autoloaded - in my own gems, I find I need to make sure I have Rails being loaded, and the gem I'm developing to have a subclass of Rails::Engine
which is also loaded as part of the gem setup. Are both of these things the case in your own code?
Some examples:
Thanks for the quick response! I've added both lines to their respective files in my engine, but I'm still getting the same error. I notice your model is scoped to the Visa
namespace: https://github.com/inspire9/visa/blob/master/app/models/visa/token.rb.
My model however is in the global namespace (extracted from a previous app where it still depends on the naming). Is it possible that would cause problems?
For reference, here's my current spec_helper.rb:
require 'bundler'
Bundler.require :default, :development
require 'rails'
require 'combustion'
# If you're using all parts of Rails:
Combustion.initialize! :all
# Or, load just what you need:
# Combustion.initialize! :active_record, :action_controller
require 'rspec/rails'
# If you're using Capybara:
# require 'capybara/rails'
RSpec.configure do |config|
config.use_transactional_fixtures = true
end
Ah! I needed to add require <my_engine>
to the spec_helper. Mystery solved!
Good to know you got it figured out :)
For what it's worth, I think you should have the require statement for your engine in your actual gem's code, so it's available in Rails apps, not just in your tests.