Skip to content

Instantly share code, notes, and snippets.

@jamiefolsom
Forked from utkukaynar/has_many_tp3.rb
Created May 9, 2020 21:05
Show Gist options
  • Save jamiefolsom/81069044f94a8d4f54067385d087b80f to your computer and use it in GitHub Desktop.
Save jamiefolsom/81069044f94a8d4f54067385d087b80f to your computer and use it in GitHub Desktop.
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :memberable, polymorphic: true
end
module Memberable
extend ActiveSupport::Concern
included do
has_many :memberships, as: :memberable, dependent: :destroy
has_many :users, through: :memberships
after_create :create_membership
end
def create_membership
Membership.create(memberable_type: self.class.name, memberable_id: self.id, user_id: self.creator_id)
end
end
class Project < ActiveRecord::Base
include Memberable
end
class Group < ActiveRecord::Base
include Memberable
end
class User < ActiveRecord::Base
has_many :memberships
has_many :groups, through: :memberships, source: :memberable, source_type: 'Group'
has_many :projects, through: :memberships, source: :memberable, source_type: 'Project'
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment