Forum: Ruby on Rails legacy tables and foreign keys

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.
E11781072dafc48008250026090db501?d=identicon&s=25 Pat Hacker (Guest)
on 2007-05-21 23:11
(Received via mailing list)
Not sure what I'm doing wrong.  Sorry for the length.
Setup: ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.9.1] /
Rails 1.2.2

One estimate has many parts.

class Estimate < OldBase      # These are legacy tables that cannot be
changed.
  set_table_name 'ESTIMATE'
  set_primary_key 'EST_NUMBER'

  has_many :parts, :class_name => "OldPart", :foreign_key =>
"EST_NUMBER"
  # Estimate has a field with the name of 'ID' used as a human
readable identification -- not as a unique id in the sense of rails.
end
class OldPart < OldBase
  set_table_name "EST_PART'
  set_primary_key 'IDNUMBER'  # used as rails would use the field 'id'

  belongs_to :estimate, :foreign_key => "EST_NUMBER"
  # in OldPart is a field EST_NUMBER which contains the number of the
parent estimate.
end

Trying it out
  >> reload!
  >> estimate = Estimate.find_by_EST_NUMBER(11355)
  >> pp.estimate.EST_NUMBER
  "11355"
  >> pp estimate.ID
  "230-0019-00    "
  >> pp e.parts
  []

Looking in the development log
  SELECT * FROM ESTIMATE WHERE (ESTIMATE. EST_NUMBER = 11355)
  SELECT * FROM EST_PART WHERE (EST_PART . EST_NUMBER = '230-0019-00')

I expected
  SELECT * FROM ESTIMATE WHERE (ESTIMATE. EST_NUMBER = 11355)
  SELECT * FROM EST_PART WHERE (EST_PART.EST_NUMBER = '11355')

Changing
class OldPart < OldBase
  ...
  belongs_to :estimate, :foreign_key => "EST_NUMBER"
to
  belongs_to :estimate
or to
  belongs_to :estimate, :class_name => "Estimate", :foreign_key =>
"EST_NUMBER"
or just removing the belongs_to line

has no effect.

Has_many associations for other tables work fine.

What am I missing?  Suggestions?


Thanks
Pat
This topic is locked and can not be replied to.