我目前正在嘗試在我的Rails應用程序的API中加入屬性。用例很簡單。我有一個用戶模式:JSON和XML中的其他屬性
class User < ActiveRecord::Base
attr_accessible :email
end
我有另一種模式,基本上是用戶鏈接到事件:
class UserEvent < ActiveRecord::Base
belongs_to :user
belongs_to :event
end
我希望能夠列出使用UserEvent模型與事件相關的所有用戶通過可以以JSON或XML訪問的API,並且我希望我的UserEvent的電子郵件同時出現在XML和JSON轉儲中。
This question表明,我可以只覆蓋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
這個字符串原來是我的對象的「created_at」屬性。所以它看起來像我在這裏操縱的散列做錯了什麼。
我在我的問題中沒有提到的是我想在模型中這樣做,因爲它必須在幾個控制器中考慮到。 – rpechayr
沒問題!在你的模型中重寫'as_json'。每次將模型對象序列化爲JSON時都會調用此方法,因此它將在任何地方使用。 \t'def as_json(options = {}) super options.merge(include::user_event) end' –