Using Mongoid with ActiveRecord

I'm trying to use mongodb and postgresql simultaneously with Rails 3.1. I believe I have everything set up correctly.

What I'm interested in knowing is how to get rails to flip-flop back- and-forth between mongoid and activerecord.

For example, if I want to generate an ActiveRecord model after using mongoid, rails automatically defaults to the Mongoid gem.

rails g model Blogpost

    invoke mongoid     create app/models/blogpost.rb     invoke rspec     create spec/models/blogpost_spec.rb

How would I get rails to use ActiveRecord instead, and vice versa?

Thanks in advance

Mike

You could just go into the model and change it's inheritance. I've never used mongoid but I think that push comes to shove, simply switching << [modeltype] wouldn't be too hard. I'll keep an eye open for you though and see if I can figure it out.

Thanks Neener54, but I think I found the answer.

Instead of running:

rails g model Blogpost

I need to run

rails g active_record:model Blogpost

and that should generate all the ActiveRecord files, even though I have mongoid installed.

However, now I am running into issues with migration and trying to use the Devise plugin.

After installing the Devise plugin and auto-generating a User ActiveRecord model using:

rails g active_record:devise User

I try to run my migrations. Here is the error output:

rake db:migrate

rake aborted! undefined method `devise' for User(Table doesn't exist):Class

Tasks: TOP => db:migrate => environment (See full trace by running task with --trace)

I tried the same flow in a separate project, except using only ActiveRecord with no Mongoid and I was able to run migrations successfully. Apparently, Mongoid is messing up my ActiveRecord classes when I try to run rake.

Would anyone have a solution? For example, is there a similar way to force rake to use ActiveRecord, such as when using rails-generate (rails g active_record:***)?

By the way, I'm using ruby 1.9.2p290, Rails 3.1.0, Mongoid 2.3, bson_ext 1.4, and devise 1.5.3.

Thanks in advance

Mike

Okay, I believe this is a bug in Devise.

When I generate the User model using:

rails g active_record:devise User

I get a config/initializers/devise.rb file with the following setting:

require 'devise/orm/mongoid'

However, if I run "rails g active_record:devise User", the setting should actually be:

require 'devise/orm/active_record'

I would expect the mongoid ORM to be used by devise if I ran

rails g devise user

without specifying "active_record", but I didn't.

Unless I'm missing something, this seems like a bug in Devise. I filed a bug with the Devise team. Hopefully I'm not wrong and just wasting people's time.

Thanks,

Mike