Сопоставление JSON Api с моделью в Rails

У меня есть доступ к JSON API, и я хотел бы сопоставить API с некоторыми классами в моей модели Rails 3.2.1, поэтому мне не нужна база данных.

Пример: API возвращает текущего пользователя со следующим JSON {"first_name": "John", "last_name": "Smith"}

Я хочу создать нового пользователя из этого JSON. Я читал, что могу использовать Active Model.

В основном я бы хотел:

user = User.new.from_json '{"first_name":"John","last_name":"Smith"}'
Rails.logger.debug user.attributes[:first_name]
Rails.logger.debug user.attributes['first_name']
Rails.logger.debug user.first_name

Он должен напечатать «Джон» три раза.

Я использую этот класс

class User
  include ActiveModel::Serializers::JSON
  attr_accessor :attributes
end

но это вообще не работает. Если я сделаю user.to_yaml, он вернет

--- !ruby/object:User
attributes: John

Любая идея ?

Спасибо

Жоффруа


person geoffroy    schedule 20.02.2012    source источник


Ответы (1)


Попробуйте следующее,

user = User.new.from_json('{"first_name":"John","last_name":"Smith"}', false)

Если это не решило вашу проблему, следуйте инструкциям ниже, потому что внутренний from_json метод использует ActiveSupport::JSON.decode

User.new(ActiveSupport::JSON.decode('{"first_name":"John","last_name":"Smith"}'))
person nkm    schedule 20.02.2012
comment
Большое спасибо! user = User.new.from_json ('{first_name: John, last_name: Smith}', false) делает свое дело. Единственная проблема, с которой я столкнулся, - это сбой Rails.logger.debug user.first_name: NoMethodError (неопределенный метод `first_name 'для #‹ User: 0x007fdefcaae348 ›) - person geoffroy; 21.02.2012
comment
Похоже, что-то не так с методом accesser для атрибута first_name в вашем пользовательском классе. - person nkm; 21.02.2012