У меня есть следующие модели:
class Conversation < ApplicationRecord
enum status: [ :active, :archived ]
belongs_to :person
end
class Person < ApplicationRecord
has_many :conversations
end
Когда я запускаю следующий запрос,
@people = Person
.select('`user`.`name`, `conversations`.`status` AS conversation_status')
.joins(:conversations)
@people.map &:conversation_status
# => [1, 1, 0]
я получаю значения conversation_status
нетипизированные, потому что возвращаемые записиэкземпляры модели Person
, но enum
определено в Conversation
.Мне было интересно, есть ли способ набрать значение столбца enum
вручную.Я могу сделать следующее, чтобы набрать приведенные значения:
@people.map do |person|
Conversation.statuses.find { |name, i| i == person.conversation_status }.first
end
# => ['archived', 'archived', 'active']
, но это немного неловко.Есть ли официальный / rails / менее неловкий способ туда добраться?
Копаясь в исходном коде, я обнаружил, что есть экземпляр ActiveRecord::Enum::EnumType
, который может deserialize
значение для меня, но я этого не сделалнайдите какой-нибудь публичный способ получить его.