Есть ли способ ввести приведенное значение столбца enum в объединенной таблице? - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть следующие модели:

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 значение для меня, но я этого не сделалнайдите какой-нибудь публичный способ получить его.

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