Association headaches

Hi,

I'm trying to wrap my head around an association problem.

     create_table :events do |t|
       t.column :name, :text
       t.column :place, :text
     end

    create_table :users do |t|
       t.column :name, :text
    end

    create_table :events_users do |t|
       t.column :event_id, :integer
       t.column :user_id, :integer
       t.column :user_role, :text
     end

I want to use :events_users as a HABTM table to connect :events and :users like so:

class Event < ActiveRecord::Base
   has_and_belongs_to_many :users
end

class User < ActiveRecord::Base
   has_and_belongs_to_many :events
end

But I also want to be able to access the extra information of which role the user had during an event. I can't see how to do that. has_many :through doesn't seem to offer a solution either, or does it?

Best,
Dav

So I figure I might create a new class inheriting from User and add some extra variables like:

class Participant < User
    @role = ...
end

But how can I populate a single extra variable this way?
Any suggestions please, still trying to figure Rails out...

Chrs,
Dav

    create_table :events do |t|
      t.column :name, :text
      t.column :place, :text
    end

   create_table :users do |t|
      t.column :name, :text
   end

   create_table :events_users do |t|
      t.column :event_id, :integer
      t.column :user_id, :integer
      t.column :user_role, :text
    end

I got my HABTM association between users and events going so far, I can even retrieve the records from the database including the extra information from the HABTM table.

event.users #=> <User @attributes={"name"=>"Dav", "user_role"=>"Host"} > etc...

The user_role being selected with the rest of the user attributes seems to be a side-effect of ActiveRecord selecting * from all tables when retrieving HABTM associations. Good so far, but how can I get the user_role value *into* the table? I guess I could specify a custom :insert_sql string in the model, but that seems very messy and additionally I wouldn't know how to hand the attribute to ActiveRecord.

event.users.create(:name => "foo", :user_role => "Guest")
certainly wouldn't work...

Any suggestions please!
Chrs,
Dav

You need to use has_many :through.

I see! It actually works now. :slight_smile:
Thanks!