Overriding has_many :through

Hi!

I have two classes, ‘node’ and ‘way’, linked by ‘way_node’. It’s a
fairly straightforward relationship:

node:
has_many :way_nodes
has_many :ways, :through => :way_nodes

way:
has_many :way_nodes, :foreign_key => ‘id’, :order => ‘sequence_id’
has_many :nodes, :through => :way_nodes, :order => ‘sequence_id’

way_node:
belongs_to :node
belongs_to :way, :foreign_key => :id

This typically results in queries like:
SELECT [blah] FROM nodes
LEFT OUTER JOIN way_nodes ON (nodes.id = way_nodes.node_id)
LEFT OUTER JOIN ways ON (ways.id = way_nodes.id)

However, for one single query in the app, I’d like to join via a
different table. In other words:
SELECT [blah] FROM nodes
LEFT OUTER JOIN new_table ON (nodes.id = new_table.node_id)
LEFT OUTER JOIN ways ON (ways.id = new_table.id)

Is there any way of doing this? I’d wondered about the :joins option in
‘find’, but it only adds additional joins, rather than replacing the
existing ones.

Thanks for any help!

cheers
Richard

How about

has_many :ways2, :class_name => “Way”, :through => :new_ways

You’d need another model for new_ways and appropriate associations to
way.

Thanks - after another suggestion I ended up doing something very
similar:

node.rb:
has_many :old_way_nodes
has_many :ways_via_history, :class_name=> “Way”, :through =>
:old_way_nodes, :source => :way

old_way_node.rb:
belongs_to :way, :foreign_key=> :id

The :source meant I didn’t even have to set up a new model.