дополнительные атрибуты в JSON и XML - PullRequest
2 голосов
/ 13 июля 2011

В настоящее время я пытаюсь включить атрибуты в API моего приложения Rails. Вариант использования прост. У меня есть модель пользователя:

class User < ActiveRecord::Base
  attr_accessible :email
end

У меня есть другая модель, в основном связывающая пользователей с событием:

class UserEvent < ActiveRecord::Base
  belongs_to :user
  belongs_to :event
end

Я хочу иметь возможность перечислять всех пользователей, связанных с событием, используя модель UserEvent через API, доступный как JSON или XML, и я хотел бы, чтобы электронная почта моего UserEvent отображалась как в дампе XML, так и в JSON.

Этот вопрос говорит о том, что я могу просто переопределить serialiable_hash, ну, похоже, это работает только для JSON, так как похоже, что serializable_hash не используется to_xml

Другой подход, который я исследовал, заключался в переопределении метода атрибутов в моем классе:

class UserEvent < ActiveRecord::Base
   def attributes
    @attributes = @attributes.merge "email" => self.email
    @attributes
  end
end

Это хорошо работает для JSON, но выдает ошибку при попытке XML-версии:

undefined method `xmlschema' for "2011-07-12 07:20:50.834587":String

Эта строка оказывается атрибутом "creation_at" моего объекта. Похоже, я что-то не так делаю с хэшем, которым я здесь манипулирую.

1 Ответ

2 голосов
/ 31 августа 2011

Вы можете легко добавить дополнительные вложенные данные в ответы API, используя include.Вот пример:

respond_with(@user, :include => :user_event )

Вы также должны добавить обратную связь в User:

has_many :user_events

Вы можете передатьмассив до :include для нескольких моделей.Он будет сериализован и соответствующим образом вложен в ответ.

...