Daniel Thompson
Daniel Thompson

Reputation: 2351

ActiveRecord -- user has_many events and belongs to those events as member

I want to set up a relationship where users can start events and then also join them as members. I figured this uses a many to many relationship, but it also has a simple belongs_to relationship from Event to User.

class User < ActiveRecord::Base
  has_secure_password
  has_many :events # => Owning
  has_many :events, through: :members  # => Joining
end

class Event < ActiveRecord::Base
  belongs_to :user # => event owner
  has_many :users, through: :members # => joining users
end

class Member < ActiveRecord::Base
  belongs_to :user
  belongs_to :event
end

But I'm having trouble getting queries like Event.first.members to work... I can't figure out what's preventing me from using these methods. Am I thinking of these relationships the wrong way? My Schema.rb:

ActiveRecord::Schema.define(version: 20161205220807) do

  create_table "events", force: :cascade do |t|
    t.string   "title"
    t.string   "location"
    t.integer  "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  add_index "events", ["user_id"], name: "index_events_on_user_id"

  create_table "members", force: :cascade do |t|
    t.integer  "user_id"
    t.integer  "event_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  add_index "members", ["event_id"], name: "index_members_on_event_id"
  add_index "members", ["user_id"], name: "index_members_on_user_id"

  create_table "users", force: :cascade do |t|
    t.string   "name"
    t.string   "email"
    t.integer  "age"
    t.string   "password_digest"
    t.datetime "created_at",      null: false
    t.datetime "updated_at",      null: false
  end

end

Upvotes: 2

Views: 323

Answers (1)

user3366016
user3366016

Reputation: 1312

Updated to fix my mistake

  class User < ActiveRecord::Base
      has_secure_password
      has_many :members
      has_many :events, through: :members
    end

    class Event < ActiveRecord::Base
      #belongs_to :user # => event owner
      has_many :members
      has_many :users, through: :members

    class Member < ActiveRecord::Base
      belongs_to :user
      belongs_to :event
    end

If this is giving you a stack level too deep error im guessing the issue is elsewhere. Your logs might have more info.

Upvotes: 1

Related Questions