Почему переменная в моделе меняется?
Потому что руби при создании объекта не копирует данные класса, а хранит ссылку на него. TYPES это константа класса, при ее изменении данные обновятся у всех объектов. В случае обычного класса Вам нужно было бы переопределить метод initialize с установкой нужной переменной, но для модели это делать не жлательно и лучше воспользоваться колбеком. 

Кроме того присваивание работает по ссылке, поэтому массив нужно именно скопировать

class Book < ActiveRecord::Base
  DEFAULT_TYPES = ['Classics', 'Fantasy']

  after_initialize :set_default_book_types

  def book_types
    @book_types
  end

  def set_default_book_types
    @book_types = DEFAULT_TYPES.map(&:clone)
  end
end
def book_types
  TYPES # тут TYPES передается по ссылке
end

возможно, вам подойдет вариант с дублированием:
def book_types
  TYPES.dup
end