JSON和XML中的其他属性

时间:2011-07-13 13:18:23

标签: ruby-on-rails-3 activerecord xml-serialization jsonserializer

我目前正在尝试将属性合并到我的Rails应用程序的API中。用例很简单。我有一个用户模型:

class User < ActiveRecord::Base
  attr_accessible :email
end

我有另一个模型,基本上将用户链接到一个事件:

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

我希望能够通过可以作为JSON或XML访问的API使用UserEvent模型列出与事件相关的所有用户,并且我希望我的UserEvent的电子邮件出现在XML和JSON转储中。

This question建议我可以覆盖serialiable_hash,这似乎只适用于JSON,因为看起来to_xml不使用serializable_hash

我调查过的另一种方法是覆盖我班级的属性方法:

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

这个字符串原来是我对象的“created_at”属性。所以看起来我在这里操作的哈希上做错了。

1 个答案:

答案 0 :(得分:2)

您可以使用include轻松地将其他嵌套数据添加到API响应中。这是一个例子:

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

您还应该在User中添加反向关联:

has_many :user_events

您可以为多个模型将数组传递给:include。它会将它们串行化并将它们嵌套在响应中。