Yuri Leikind
2008-Feb-05 12:24 UTC
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 Leikind --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---