app/models/project_member.rb
# A ProjectMember is the link between projects and users.
#
# @!attribute project_id
# @return [Integer]
# the project ID
#
# @!attribute user_id
# @return [Integer]
# the user
#
# @!attribute is_project_administrator
# @return [Boolean]
# whether the user is a project administrator
#
class ProjectMember < ApplicationRecord
include Housekeeping::Users
include Housekeeping::Timestamps
include Shared::IsData
belongs_to :project, inverse_of: :project_members
belongs_to :user, inverse_of: :project_members
validates :project, presence: true
validates :user, presence: true
validates_uniqueness_of :user_id, scope: [:project_id], message: 'is already a member of project'
validate :clipboard_slots
protected
def clipboard_slots
errors.add(:clipboard, 'slot is not legal') if clipboard.keys - %w{1 2 3 4 5} != []
end
end