Установка значений по умолчанию для моделирования при использовании представлений rails db — Scenic gem

#ruby-on-rails #scenic

#ruby-on-rails #scenic

Вопрос:

Модель контакта имеет значения по умолчанию для столбца is_pickup

 Contact.new
=> id: 2, email: nil, order_id: nil, is_pickup: true
 

Теперь я подключаю таблицу контактов к представлениям rails db с помощью scenic gem

 class OrderContact < ApplicationRecord
      self.table_name = 'temp_contacts'
      self.primary_key = :id
    ...
end
 

Проблема в том, что я не могу установить значения по умолчанию для записи.

я попытался добавить следующее в модель контактов

 def is_pickup
  self[:is_pickup] || true
end
 

Но все равно он не отображается в консоли rails

 Contact.new
    => id: 2, email: nil, order_id: nil, is_pickup: nil
 

Мне нужно установить значение по умолчанию при инициализации записи.

Есть идеи о том, как установить значения по умолчанию для модели при использовании представлений db?

Комментарии:

1. Если я правильно понимаю Contact , указывает на таблицу (с правильными значениями по умолчанию) и OrderContact указывает на представление. Почему Contact больше не установлены значения по умолчанию? Вы пытаетесь создать новый контакт на OrderContact ? Вы не можете создать новый элемент в представлении, вы всегда должны создавать его в таблице (она же соответствующая модель).

Ответ №1:

вы можете указать значение по умолчанию в миграциях

 change_column_default :contacts, :is_pickup, true
 

или вы можете добавить обратный вызов в свою модель

 class Contact < ActiveRecord::Base
    after_initialize :init

    def init
      self.is_pickup ||= true
    end
  end