Sha256: 91a5ce2067d37758ec28acece0e104c65080c64fca6a21dace38b8f4d37fe473
Contents?: true
Size: 1.11 KB
Versions: 6
Compression:
Stored size: 1.11 KB
Contents
class Spotlight::Role < ActiveRecord::Base ROLES = %w(admin curator) belongs_to :exhibit belongs_to :user, class_name: '::User', autosave: true validates :role, inclusion: { in: ROLES } validates :user_key, presence: true validate :user_must_exist, if: -> { user_key.present? } validate :user_must_be_unique, if: :user def user_key if user @user_key = user.user_key else @user_key end end # setting user key causes the user to get set def user_key= key @user_key = key self.user ||= User.find_by_user_key(key) if user user.user_key = key end end protected def user_must_exist unless user.present? errors.add(:user_key, "User must sign up first.") end end # This is just like # validates :user, uniqueness: { scope: :exhibit} # but it puts the error message on the user_key instead of user so that the form will render correctly def user_must_be_unique if Spotlight::Role.where(exhibit_id: exhibit_id, user_id: user.id).where.not(id: id).any? errors.add(:user_key, "already a member of this exhibit") end end end
Version data entries
6 entries across 6 versions & 1 rubygems