Forum: Ruby on Rails foreign key (one-to-many) doesnt use correct id field from l

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.
mjt (Guest)
on 2007-02-23 04:18
(Received via mailing list)
I am attempting to setup a belongs_to / has_many relationship
and the resulting where clause is wrong:

ruby code

require "rubygems"
require_gem "activerecord"
require  "pp"


ActiveRecord::Base.establish_connection(
  :adapter => "mysql",
  :host => "devbox..internal",
  :database => "test2",
  :username => "XXX",
  :password => "XXXpassword" )


class Job < ActiveRecord::Base
  # doesnt have id as the primary key
  set_primary_key "jobid"
  has_many :audits

end

class Audit < ActiveRecord::Base

  set_table_name "job_audit"      # legacy name
  belongs_to :job,
             :class_name => "Job",
       :foreign_key => "jobid"

end

jj = Job.find(900000)

pp jj


jj.audits.each do |ja|
  pp ja
end


what I get is this

ttyp6 > ruby report.rb
#<Job:0x810d760
 @attributes=
  {"doa"=>"0",
   "item_id"=>"0",
   "faultid"=>"3110",
   "status"=>"CLOSED",
   "proj_mustfinish"=>"0000-00-00 00:00:00",
   ... omitted columns ...
   "jobid"=>"900000",
   "partid"=>"0",
   "resp_ts"=>"10:42:00",
   ... omitted columns ...
   "escalation"=>"0"}>

which is the correct job record
and then this

/usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/
active_record/connection_adapters/abstract_adapter.rb:128:in `log':
Mysql::Error: Unknown column 'job_audit.job_id' in 'where clause':
SELECT * FROM job_audit WHERE (job_audit.job_id = 900000)
(ActiveRecord::StatementInvalid)
        from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/
active_record/connection_adapters/mysql_adapter.rb:243:in `execute'
        from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/
active_record/connection_adapters/mysql_adapter.rb:395:in `select'
        from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/
active_record/connection_adapters/abstract/database_statements.rb:7:in
`select_all'
        from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/
active_record/base.rb:424:in `find_by_sql'
        from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/
active_record/base.rb:994:in `find_every'
        from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/
active_record/base.rb:415:in `find'
        from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/
active_record/associations/has_many_association.rb:91:in `find'
        from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/
active_record/associations/association_collection.rb:159:in
`find_target'
        from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/
active_record/associations/has_many_association.rb:123:in
`load_target'
        from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/
active_record/associations/association_proxy.rb:122:in
`method_missing'
        from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/
active_record/associations/has_many_association.rb:98:in
`method_missing'
        from report.rb:35



>From my understanding of the belongs_to / has_many  options
and the legacy renaming of the id field the where clause above
should be

 SELECT * FROM job_audit WHERE (job_audit.jobid = 900000)

not
SELECT * FROM job_audit WHERE (job_audit.job_id = 900000)


what am i doing wrong?

mjt
This topic is locked and can not be replied to.