有什么方法可以在联接表中键入枚举列的强制转换值?

时间:2018-12-04 18:24:08

标签: ruby-on-rails ruby join enums

我有以下型号:

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']

但是看起来有点尴尬。有官方/铁路/不太尴尬的方式到达那里吗?

深入研究源代码,我发现有一个ActiveRecord::Enum::EnumType实例可以为我deserialize赋值,但是我没有找到任何公开的方法来获取它。

0 个答案:

没有答案