Forum: Ruby on Rails ActiveRecord not as smart as I thought it would be? or is it me?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
10f7e00c1c5c60e2173995eb16f4ffc7?d=identicon&s=25 pepe (Guest)
on 2009-05-31 16:19
(Received via mailing list)
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
A91bd6cef23eb3516245a092e196c4da?d=identicon&s=25 Maurício Linhares (mauricio)
on 2009-05-31 18:00
(Received via mailing list)
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.

-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/
(en)
10f7e00c1c5c60e2173995eb16f4ffc7?d=identicon&s=25 pepe (Guest)
on 2009-05-31 22:46
(Received via mailing list)
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

On May 31, 11:59 am, Maurício Linhares <mauricio.linha...@gmail.com>
A91bd6cef23eb3516245a092e196c4da?d=identicon&s=25 Maurício Linhares (mauricio)
on 2009-05-31 23:18
(Received via mailing list)
Here's how it would look like:

class YourModel < ActiveRecord::Base
    establish_connection :ube
end

-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/
(en)
10f7e00c1c5c60e2173995eb16f4ffc7?d=identicon&s=25 pepe (Guest)
on 2009-06-01 00:05
(Received via mailing list)
So it was ME! :)

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

Thanks!

Pepe

On May 31, 5:17 pm, Maurício Linhares <mauricio.linha...@gmail.com>
This topic is locked and can not be replied to.