ActiveRecord not as smart as I thought it would be? or is it me?

Hello,

I have been wrestling for a couple of days trying to make my application work with 2 different databases simultaneously. Finally got it running but I am a bit disappointed at what I needed to do in order to make it work. I have a couple case scenarios:

First case scenario: MySQL A: 6 tables MySQL B: 1 table

Following instructions from the AWDWR book and any other source of information I've read I add an **ActiveRecord::Base.establish_connection()** declaration in the model for the table in MySQL B.

Seems simple, but did not work. I tried adding the connection parameters inside the model and also using a symbol to reference a 'database.yml' entry. Nothing.

Finally, when I was getting ready to ask for help I had the idea that made it work. I added **self.table_name = 'my_db.my_table_name'** in every model (including the main DB, named 'A' in this example) and everything started working.

Second case scenario: MySQL: 6 tables Oracle: 1 table

Same as above but in addition to adding the **self.table_name** stuff I needed to add in every table of the main (MySQL) DB an **ActiveRecord::Base.establish_connection()** declaration pointing to either 'development', 'test' or 'production', depending on which DB I was using.

I thought that Rails would 'know' which DB to use. Am I wrong? Should I have added any type of setup value in 'environment.rb'/other place to avoid all this?

Thanks.

Pepe

Stupid question, did you do: "ActiveRecord::Base.establish_connection" or did you just call "establish_connection" in your model?

As you might imagine right now, calling "ActiveRecord::Base.establish_connection" is very different than calling establish_connection in the model you want to connect to another database.

Thanks Maurício,

For that extra table I used either ActiveRecord::Base.establish_connection( :ube ) in the model, with the following in database.yml: ube:   adapter: mysql   database: ube   user: root

or

ActiveRecord::Base.establish_connection(   :adapter => 'mysql',   :database => 'ube',   :user => 'my_user' ) in the model and no :ube declaration in database.yml

As I understand using 'establish_connection' by itself would connect me to the 'current' DB, wouldn't it?

Thanks.

Pepe

Here's how it would look like:

class YourModel < ActiveRecord::Base     establish_connection :ube end

So it was ME! :slight_smile:

Thanks a lot Mauricio. As usual, it was so much simpler than I thought. Works like a charm.

Thanks!

Pepe