has_and_belongs_to_many on different databases

60 views
Skip to first unread message

erzapito

unread,
Oct 16, 2009, 5:29:24 AM10/16/09
to Ruby on Rails: Talk
Hi, I'm working with two models that have a "has_and_belongs_to_many"
relation. Both models reside on a database that it is not the default
one.

A < External
has_and_belongs_to_many: B

B < External
has_and_belongs_to_many: A

Retriving the information for A works perfectly, but when trying to
"create" an element on A:

"A.B.create(...)"

ActiveRecord tries to create it on the default database. The solution
was doing:

b = B.find(...)
A.B << b


But, looking on the sourcecode I've found on the ActiveRecord file
"has_and_belongs_to_many_association.rb [25:29]"

def has_primary_key?
return @has_primary_key unless @has_primary_key.nil?
@has_primary_key =
(ActiveRecord::Base.connection.supports_primary_key? &&
ActiveRecord::Base.connection.primary_key(@reflection.options
[:join_table]))
end

Shouln't it be something like?

def has_primary_key?
return @has_primary_key unless @has_primary_key.nil?
@has_primary_key = (@owner.connection.supports_primary_key? &&
@owner.connection.primary_key(@reflection.options
[:join_table]))
end

Thank you

Frederick Cheung

unread,
Oct 16, 2009, 6:31:02 AM10/16/09
to Ruby on Rails: Talk


On Oct 16, 10:29 am, erzapito <erzap...@gmail.com> wrote:
> Hi, I'm working with two models that have a "has_and_belongs_to_many"
> relation.  Both models reside on a database that it is not the default
> one.
>

Have you tried using has many through ? with has many through the join
table is also a rails model, so you have a place to say that the join
table should be in this other database.


Fred

Alexandre Paz Mena

unread,
Oct 16, 2009, 6:39:05 AM10/16/09
to rubyonra...@googlegroups.com


On Fri, Oct 16, 2009 at 12:31 PM, Frederick Cheung <frederic...@gmail.com> wrote:

Have you tried using has many through ? with has many through the join
table is also a rails model, so you have a place to say that the join
table should be in this other database.

I tried it, but doing some tests I found that it allowed to have more than one relation between two elements, a new problem that I don't know how to solve.

The real problem was with the library file, deleting elements also fails because it tries to use the base connection instead of the ancestor's one.

--
erza...@gmail.com   @  google talk :D

Marnen Laibow-Koser

unread,
Oct 16, 2009, 11:46:05 AM10/16/09
to rubyonra...@googlegroups.com
Alexandre Paz Mena wrote:
> On Fri, Oct 16, 2009 at 12:31 PM, Frederick Cheung <
> frederic...@gmail.com> wrote:
>
>>
>> Have you tried using has many through ? with has many through the join
>> table is also a rails model, so you have a place to say that the join
>> table should be in this other database.
>
>
> I tried it, but doing some tests I found that it allowed to have more
> than
> one relation between two elements, a new problem that I don't know how
> to
> solve.

validates_uniqueness_of and a unique index in the DB. Done.

Best,
--
Marnen Laibow-Koser
http://www.marnen.org
mar...@marnen.org
--
Posted via http://www.ruby-forum.com/.

Reply all
Reply to author
Forward
0 new messages