mjt
2007-Feb-23 02:17 UTC
foreign key (one-to-many) doesnt use correct id field from legacy database
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 optionsand 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 --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---