Hello, im trying to wrap a fairly ugly legacy schema using AR. How to handle normalized informations which aren''t connected via the pk? create table what ( myid int, myclass int, ;; references blahclass.blahid mygender int ) create table blahclass ( blahid int, mdesc1 text, fdesc1 text) ) I would like to wrap this as class What < AR::Base has_one :blahclass class Blahclass < AR::Base belongs_to :who The problem is that a lookup of who.blahclass uses the who.pk to get the Blahclass record, but it should use who.blahclass. I dont find a way to specify this. Of course it would be easy to hardwire the logic into a method, but i would like to use the normal relation wiring .... Cheers, Dirk -- Posted via http://www.ruby-forum.com/.
On Apr 7, 2006, at 8:11 AM, Dirk Vleugels wrote:> Hello, > > im trying to wrap a fairly ugly legacy schema using AR. How to handle > normalized informations which aren''t connected via the pk? > > create table what ( > myid int, > myclass int, ;; references blahclass.blahid > mygender int > ) > > create table blahclass ( > blahid int, > mdesc1 text, > fdesc1 text) > ) > > I would like to wrap this as > > class What < AR::Base > has_one :blahclass > > class Blahclass < AR::Base > belongs_to :who > > The problem is that a lookup of who.blahclass uses the who.pk to > get the > Blahclass record, but it should use who.blahclass. I dont find a > way to > specify this. > > Of course it would be easy to hardwire the logic into a method, but i > would like to use the normal relation wiring .... > > Cheers, > DirkFirst off, your has_one and belongs_to are backwards. Beyond that you just need to specify the foreign key field: class What < AR::Base belongs_to :blahclass, :foreign_key => "myclass" end class Blahclass < AR::Base has_one :what, :foreign_key => "myclass" end -Derrick Spell
Dirk > create table what ( > myclass int, ;; references blahclass.blahid > ... ... > I would like to wrap this as > class What < AR::Base > has_one :blahclass It''s in the other direction (a common error): class What < AR::Base belongs_to :blahclass ... ... When you read ''belongs_to'', think ''references'', ''points_to''. For the details, check ''has_one'' and ''belongs_to methods doc. at http://api.rubyonrails.com/ Alain