現在、私のRailsアプリケーションのAPIに属性を組み込もうとしています。ユースケースは単純です。私はこのUserEventモデルを使用してイベントに関連するすべてのユーザーを一覧表示することができるようにしたいJSONとXMLの両方で追加の属性
class UserEvent < ActiveRecord::Base
belongs_to :user
belongs_to :event
end
:私は別のモデル、基本的にイベントにユーザーをリンクを持っている
class User < ActiveRecord::Base
attr_accessible :email
end
:私は、Userモデルを持っていますJSONまたはXMLとしてアクセス可能なAPIを介して、私はUserEventの電子メールをXMLとJSONの両方のダンプに表示したいと思います。 serializable_hashは私が研究してきた別のアプローチは、私のクラスの属性メソッドをオーバーライドすることでしたto_xml
で使用されていないように見えるよう
This questionは、私はちょうどserialiable_hashを上書きすることができ、よくこれだけJSONのために働くように見えることを示唆しています:
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' –