Weird behavior of belongs_to referencing a model with set_table_name

Hello all,
I am experiencing some really weird behavior of belongs_to with a model
where the table name is set by set_table_name

I have two simple models:

=== file legal_entity.rb

class LegalEntity < ActiveRecord::Base
set_table_name ‘legalentities’
end

=== file legal_entity_person.rb

class LegalEntityPerson < ActiveRecord::Base

set_table_name ‘legalentities_people’

belongs_to :legal_entity, :foreign_key => ’ legalentity_id’
end

=====

If I find a LegalEntityPerson object with :include => :legal_entity it
works
as expected:

$ ./script/runner ‘a = LegalEntityPerson.find(:first, :include =>
:legal_entity); p a.legal_entity’
#<LegalEntity id: 1, name: “Some Company”, legalentitytype_id: 3>

and looking a the log I see the select method with the 2 tables joined,
it’s
fine.

Now, if I drop :include => :legal_entity, a.legal_entity returns nil:

$ ./script/runner ‘a = LegalEntityPerson.find(:first); p
a.legal_entity’
nil

And what is interesting is that there is no SQL query to the DB, that
is,
there is SELECT * FROM legalentities_people LIMIT 1 for the find
method,
and nothing else, a.legal_entity silently returns nil without any
warnings
or complaints.

If I rewrite my models like this following naming conventions:

=== file legalentity.rb

class Legalentity < ActiveRecord::Base

end

=== file legal_entity_person.rb

class LegalEntityPerson < ActiveRecord::Base

set_table_name ‘legalentities_people’

belongs_to :legalentity
end

=====

it works:

$ ./script/runner ‘a = LegalEntityPerson.find(:first); p a.legalentity’
#<Legalentity id: 1, name: “Some Company”, legalentitytype_id: 3>

BUT!!!

If I specify :foreign_key explicitly like this:

belongs_to :legalentity, :foreign_key => ’ legalentity_id’

it doesn’t work again:

Is there any reason behind this behavior or is it a bug?

I am using Rails 2.0.2, mysql 5.0.51a, all running on OS X, and with
the
following sql code you can reproduce it:

CREATE TABLE legalentities (
id int(10) unsigned NOT NULL auto_increment,
name varchar(255) NOT NULL,
legalentitytype_id int(10) unsigned NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

INSERT INTO legalentities VALUES (1,‘Some Company’,3);

CREATE TABLE legalentities_people (
id int(10) unsigned NOT NULL auto_increment,
legalentity_id int(10) unsigned NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

INSERT INTO legalentities_people VALUES (1,1);


Best regards,
Yuri L.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs