Вы можете попробовать что-то вроде этого:
class Membership < ApplicationRecord
belongs_to :user
belongs_to :event
enum type: [ :host, :reservation, :attendance ]
end
class Event < ApplicationRecord
belongs_to :poster, class_name: "User"
has_many :host_memberships, -> { host }, class_name: "Membership"
has_many :reservation_memberships, -> { reservation }, class_name: "Membership"
has_many :attendance_memberships, -> { attendance }, class_name: "Membership"
has_many :hosts, through: :host_memberships, source: "User"
has_many :reservations, through: :reservation_memberships, source: "User"
has_many :attendees, through: :attendance_memberships, source: "User"
end
class User < ApplicationRecord
has_many :posts, class_name: "Event"
has_many :host_memberships, -> { host }, class_name: "Membership"
has_many :reservation_memberships, -> { reservation }, class_name: "Membership"
has_many :attendance_memberships, -> { attendance }, class_name: "Membership"
has_many :hosted, through: :host_memberships, source: "Event"
has_many :reservations, through: :reservation_memberships, source: "Event"
has_many :attended, through: :attendance_memberships, source: "Event"
end