class Agency < ApplicationRecord include Bitfields belongs_to :agent belongs_to :user bitfield :roles, :observer, :editor, :maintainer, :leader class << self # Grant role in agent to user def grant(agent, user, role) r = find_or_create_by(agent: agent, user: user) r&.public_send("#{role}=", true) && r&.save end # Revoke role in agent from user def revoke(agent, user, role) r = find_by(agent: agent, user: user) r&.public_send("#{role}=", false) && r&.save end end end