私はas_jsonメソッドを使用している問題に直面しています.JSONでオブジェクトを効率的に返す方法と、belongs_toオブジェクトが独自のbelongs_toオブジェクトを持つJSONとしてのbegs_toオブジェクトです。コードはおそらくそれをよりよく説明するでしょう。
うまくいかない方法
アラート クラス
class Alert < ActiveRecord::Base
belongs_to :message
# for json rendering
def as_json(options={})
super(:include => :message)
end
end
メッセージクラス
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 オブジェクトがあり、
alert.as_json()
Alert からすべての属性を取得し、Message からすべての属性を取得しますが、カメラ、位置など、メッセージから必要な他の属性は取得しません。
これが「機能しているが、おそらく適切な設計方法ではない」です
アラート クラス
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 規則が欠けているのでしょうか? もっと簡単な方法があるはずです。