class UserThemeSlot < ApplicationRecord BASE_THEMES = ['light', 'dark'].freeze SLOT_NOS = [1, 2, 3].freeze belongs_to :user validates :user_id, presence: true validates :base_theme, presence: true, inclusion: { in: BASE_THEMES } validates :slot_no, presence: true, inclusion: { in: SLOT_NOS } validates :tokens, presence: true validates :user_id, uniqueness: { scope: [:base_theme, :slot_no] } validate :tokens_must_be_object def serializable_hash(options = nil) hash = { only: [:base_theme, :slot_no, :tokens, :created_at, :updated_at] } super(hash.merge(options || {})) end private def tokens_must_be_object return if tokens.is_a?(Hash) errors.add(:tokens, 'は JSON object で指定してください.') end end