Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

This project is archived and is in readonly mode.

has_many :through with :source does not work correctly with find(:include)

#409

Sorry I did not provide a proper attachment with tests, etc. But I have no idea how to do that :)

Given the following code:

Cargo model:

class Cargo < ActiveRecord::Base
  belongs_to :load_stop, 
             :foreign_key => 'load_stop_id', 
             :class_name => 'Stop'
end

Stop model:

class Stop < ActiveRecord::Base
  has_many :cargo_loads, 
           :class_name => 'Cargo',
           :foreign_key => 'load_stop_id'


  belongs_to :transports
end

Transport model

class Transport < ActiveRecord::Base
  has_many :stops
  
  has_many :cargos, 
           :through => :stops, 
           :source => :cargo_loads
end

Output of the console:

Basically,

Transport.find(:first).cargos

works, but

Transport.find(:first, :include => :cargos)

gives an error telling me that the column cargos.stop_id does not exist.

>> Transport.find(:first).cargos
=> [#<Cargo id: 1, load_stop_id: 1, created_at: "2008-06-13 16:40:39", updated_at: "2008-06-13 16:42:12">]
>> Transport.find(:first, :include => :cargos)
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: cargos.stop_id: SELECT transports."id" AS t0_r0, transports."created_at" AS t0_r1, transports."updated_at" AS t0_r2, cargos."id" AS t1_r0, cargos."load_stop_id" AS t1_r1, cargos."created_at" AS t1_r2, cargos."updated_at" AS t1_r3 FROM transports  LEFT OUTER JOIN stops ON (transports."id" = stops."transport_id")  LEFT OUTER JOIN cargos ON (cargos."stop_id" = stops."id")   
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract_adapter.rb:150:in `log'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/sqlite_adapter.rb:132:in `execute'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/sqlite_adapter.rb:345:in `catch_schema_changes'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/sqlite_adapter.rb:132:in `execute'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/sqlite_adapter.rb:256:in `select'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `select_all_without_query_cache'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/query_cache.rb:55:in `select_all'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/associations.rb:1242:in `select_all_rows'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/associations.rb:1124:in `find_with_associations'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/associations.rb:1122:in `catch'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/associations.rb:1122:in `find_with_associations'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:1232:in `find_every'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:1227:in `find_initial'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:502:in `find'
        from (irb):2
>>

Reported by Olafski · June 13th, 2008 @ 04:13 PM

State: stale
Milestone: none
Assigned to: nobody
Importance: none

Activity

  1. josh
    josh
    • State changed from new to stale
    • Tag set to activerecord, bug, joins

    September 18th, 2008 @ 03:48 PM