В веб-приложении Sinatra я пытаюсь получить данные из БД и преобразовать их в объект, приемлемый для пользовательского интерфейса (и, наконец, в JSON).Но есть некоторые различия в именах атрибутов, необходимых для полей пользовательского интерфейса и БД.Поэтому я использовал запрос Sequel с псевдонимами:
Sequel::Model.plugin :json_serializer
class Alarm < Sequel::Model
# attr_accessor :id, :Alarm
end
filter = Alarm.filter(:NEName => params[:name]).select(:AlarmNo___id, :AlarmMsg___Alarm).all
Но когда я пытаюсь сделать это преобразование:
res = filter.to_json
Я получаю: **undefined method** 'id' for # Alarm:0x000000027403e0
Я также попытался добавить средства доступа к модели (см. Закомментированную строку) attr_accessor :id, :Alarm
и получил много объектов, подобных этому: {"json_class":"Alarm","id":null,"Alarm":null}
, что выглядит логичным результатом.
Итак, Q1 : как заставить псевдоним сиквела работать с плагином json_serializer?
Q2 : Возможно, могут быть другие решения для обеспечения этого отображения (без создания новогоклассы и / или добавление дополнительных методов преобразования) - например, влияние на имя атрибутов json с помощью параметров в методе to_json и т. д.