私はas_jsonメソッドを使用している問題に取り掛かりました。効率的にオブジェクトをJSONに返す方法はです。これはbelongs_toオブジェクトのbelongs_toオブジェクトも独自のbelongs_toオブジェクトを持つJSONオブジェクトです。コードはおそらくそれをよりよく説明するでしょう。Rails as_jsonの問題 - ネストされたオブジェクトを効率的に含めるには?
ないワーキングウェイ
Alertクラス
class Alert < ActiveRecord::Base
belongs_to :message
# for json rendering
def as_json(options={})
super(:include => :message)
end
end
Messageクラス
def as_json(options={})
super(methods: [:timestamp, :num_photos, :first_photo_url, :tag_names],
include: { camera: { only: [:id, :name] },
position: { only: [:id, :name, :address, :default_threat_level ]},
images: { only: [:id, :photo_url, :is_hidden]} })
end
最初の設定これで問題は、私は警告オブジェクトを持っている場合電話:
alert.as_json()
私はアラートからのすべての属性とのメッセージからすべての属性を取得しますが、ここではカメラ等のような私が欲しいのメッセージから他の属性のどれも、位置、
は「それが動作していない、しかし、おそらくいます適切でないデザインの道」
アラートクラス
class Alert < ActiveRecord::Base
belongs_to :message
# for json rendering
def as_json(options={})
super().merge(:message => message.as_json)
end
end
メッセージクラス
# for json rendering
def as_json(options={})
super(methods: [:timestamp, :num_photos, :first_photo_url, :tag_names])
.merge(:camera => camera.as_json)
.merge(:position => position.as_json)
.merge(:images => images.as_json)
end
この2番目の設定では、私が望むようにすべてのメッセージのネストされた属性を取得します。
私の質問には、これを正しく行うためのRails規約がいくつかありますか?より簡単な方法があるはずです。
プルリクエストで修正されたようですが、決してバージョンにプルしませんでした。リンクをありがとう、それはいくつかの問題をクリアしました。 – bluedevil2k
レコードについては、私がそのPRから得たものは以下の通りです:1)json apiのために特定の宝石を使うようにしてください(私はActive Modelシリアライザを好む)2)そうしたくない/できないなら、 'serialized_hash 'の代わりに' as_json'を使用しています。 'as_json'を' serialized_hash'に置き換えてください。あなたのモデルは、含まれている依存関係を正しくレンダリングします。 – kikito
感謝kikito、マイナーな補正、それは 'serializable_hash' – trans1t