Question on Designing Model Associtations

Hi all,
I try to create a little game, my first application in Ruby and Rails.
And I’ve problems understanding polymorphic associations between
models. I have a model called “Travel”. Two models, “Character” and
“Truck” can participate in a travel. How should I setup the models ?

I tried it this way:
class Travel < ActiveRecord::Base
has_many :travellers
end
class Traveller < ActiveRecord::Base
belongs_to :travel
belongs_to :travelable, :polymorphic => true
end
class Character < ActiveRecord::Base
has_one :traveller, :as => :travelable
end
class Truck < ActiveRecord::Base
has_one :traveller, :as => :travelable
end

Not only that it’s not working, it’s also not a very clean approach. I
think that’s easy to explain for a more experienced developer than me,
so please give me some hints.

Thank you very much in advance and greetings from Austria
Christoph

setup seems ok, assuming that Traveller is the poly model
and has the columns travelable_id and travelable_type

Otherwise it would be helpful, to know what is not working
and what exactly you want to do here. (And why you think
it’s not a clean approach)
With games it’s especially difficult to guess your intentions.

Otherwise it would be helpful, to know what is not working
and what exactly you want to do here.
Ok, Traveller has these columns:
create_table “travellers”, :force => true do |t|
t.integer “travel_id”
t.integer “travelable_id”
t.integer “travelable_type”
end
When I do this in script/console
Travel.last.travellers << Character.last
I get the following error:
ActiveRecord::AssociationTypeMismatch: Traveller(#16747500) expected,
got Character(#16661940)

(And why you think it’s not a clean approach)
I think it’s not very clean, because I need an extra Traveller model.
I would like to avoid this if it’s possible. The situation is the
following: Both Characters and Trucks can travel. One Travel Record
holds the from/to location and through a 1:n relationship either the
participating characters/trucks. I hope my English is understandable.

Greetings
Christoph