Rails 5.2 API — Возвращает значение enum в JSON

#ruby-on-rails #json #postgresql #api #response

#ruby-on-rails #json #postgresql #API #ответ

Вопрос:

В настоящее время у меня настроен тип перечисления postgres в моих пользовательских столбцах как roles . Это работает, как и предполагалось, вот так.

Пример:

 class User < ApplicationRecord
  enum role: { admin: "Admin", viewer: "Viewer" } 
end
  

И ответ JSON возвращает его как:

 {
  "id": 1,
  "role": "admin"
}
  

Однако role атрибут возвращает ключ вместо значения enum. Есть ли решение для этого?

Ответ №1:

Попробуйте это

 def as_json(options = {})
  super.tap do |hash|
    hash['role'] = User::roles[role]
  end
end
  

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

1. Это работает и для меня. Жаль, что мне приходится по существу взламывать свой способ заставить enum работать для Rails. Спасибо.

Ответ №2:

Я бы поступил таким образом. В User файле модели

 def role_id
  User.roles[self.role]
end
  

и затем вы role_id используете метод

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

1. Вы случайно не знаете, есть ли другое решение? Я хочу сохранить его, чтобы мой JSON отражал таблицу, которая у меня есть. В этом случае мне пришлось бы предоставить метод в as_json .

2. Нет, извините, это единственный способ, который я нашел. Если вы найдете способ получше, дайте мне знать 🙂