поле enum не извлекается должным образом ActiveRecord - PullRequest
0 голосов
/ 03 мая 2019

У меня проблемы с использованием перечислений ActiveRecord в приложении Rails.

Контекст : Поле enum представляет status объекта, для простоты я включил фрагмент кода, который имеет значение для этой проблемы:

class Issue < ApplicationRecord
  enum status: %i[open in_progress closed rejected]
  has_many_attached :files
  belongs_to :issuer, class_name: 'User', foreign_key: :issuer_id

  validates_presence_of :title, :description, :issuer, :issued_at, :updated_at

  after_initialize do |issue|
    issue.issued_at = DateTime.now
    issue.updated_at = issue.issued_at
    issue.status = :open
  end

  after_update do |issue|
    issue.updated_at = DateTime.now
  end
end

Я пишу некоторые спецификации, и я заметил, что каждый раз, когда я пытаюсь получить модель, используя API ActiveRecord (например, Model.all), каждая запись имеет первый статус (open). Когда я запрашиваю базу данных, таблицы, связанные с этой моделью, содержат статусы, которые я установил для объектов, которые я храню в базе данных.

Кажется, что ActiveRecord испытывает некоторые проблемы при отображении из таблицы в модель, но не наоборот. Есть идеи, что может быть причиной такого поведения?

Я использую PostgreSQL в качестве базы данных и Rails 5.2.2

Заранее спасибо!

1 Ответ

0 голосов
/ 03 мая 2019

вы добавили issue.status = :open в блок after_initialize.это будет вызываться каждый раз, когда вы инициализируете объект.выдержать его Model.create или Model.new или Model.find или Model.all Каждый раз после инициализации этого объекта он перезаписывает свой статус на: open.Пользователь после инициализации в моделях не очень хорошая идея.Для многих таких преследуемых, где я хочу инициализировать любой новый объект, я устанавливаю значение по умолчанию для обратного вызова column или before_validation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...