I have two tables, media and tour_locations, related through a join
table. It's not a pure join, because I need a sequence number on the
relationship, so the join also has an id. When I access
"aMedium.tour_locations", the reported id's for the TourLocation's are
the id's from the join table, not the real id of the tour_locations row.
The same for "aTourLocation.media". In the sqlite3 console, the keys and
ids are all correct.

How can I fix this?

Ruby 1.8.7, Rails 2.3.5, sqlite3 3.6.12

Here is an abbreviated console dialog. MediaTourLocation(25) relates
Medium(16) to TourLocation(6).

======
>> tl = TourLocation.find(6)
>> tl.media
[... #<Medium id: 25, url: "http://www.li...> ...]
>> MediaTourLocation.find_all_by_tour_location_id(6)
[... #<MediaTourLocation id: 25, medium_sequence: 0, medium_id: 16,
tour_location_id: 6> ...]
>> med = Medium.find(16)
>> med.tour_locations
[#<TourLocation id: 25, locDescription: ...>]
======

The Medium and the TourLocation report each other as id: 25. That's
wrong; neither table has a row with that id. My web pages crash.

The habtm declarations and the schema appear at the end of this message.
You'll see I've been thrashing

class TourLocation:
======
class TourLocation < ActiveRecord::Base
   has_and_belongs_to_many :media,
                           :join_table => "media_tour_locations",
                           :readonly => false

class Medium:
======
class Medium < ActiveRecord::Base
  has_and_belongs_to_many :tour_locations,
                          :join_table => "media_tour_locations",
                          :readonly => false

Schema:
======
  create_table "media", :force => true do |t|
    t.string "url",                              :null => false
    t.string "title",       :default => ""
    t.text   "description", :default => ""
    t.string "media_type",  :default => "image", :null => false
  end

  create_table "media_tour_locations", :force => true do |t|
    t.integer "medium_sequence"
    t.integer "medium_id"
    t.integer "tour_location_id"
  end

  create_table "tour_locations", :force => true do |t|
    t.text     "locDescription",      :default => "Enter description",
:null => false
  end
-- 
Posted via http://www.ruby-forum.com/.

-- 
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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to