#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. Нет, извините, это единственный способ, который я нашел. Если вы найдете способ получше, дайте мне знать 🙂