私は、Rails 3.1でこの単純なことを無駄なく達成しようと何時間も諦めました。レコードのハッシュ表現のネストされた属性
@model = TopLevelModel.find(1, :include => {:middle_level_children => :bottom_level_children})
:
TopLevelModel:
MiddleLevelModel:
BottomLevelModel
私は熱心にそのように私のクエリでの階層全体をロードしています:私は次のように、いくつかのモデルが深いとbelongs_toの/外部キーで多対1に関連する2つのレベルを入れ子になったんです
JSONシリアライザは、ネストされた階層を(:includeオプションを使用して)シリアライズするのに問題ありませんが、これは私の目的では十分ではなく、レコード属性の(ルビー)ハッシュ表現が必要です。 @model.attributes()
は完璧ですが、それは私の関係を無視しています。このメソッドを使用してネストされたハッシュ表現を取得する方法はありますか(私はドキュメントを徹底的に読んでいないと思いますが、おそらく私が知らないいくつかのエキゾチックなオプションがあります)。明確にするために、私が探しています表現は次のようになります。
{
:attribute_1 => 'some attribute', #an attribute of top level model
#...
:middle_level_children: => [{ # type 'MiddleLevelModel'
:attr_1 => 'some attribute of middle level model',
# ...
:bottom_level_children => [{ #type 'BottomLevelModel'
:attr => 'some attribute of bottom level model'
}]
}]
}
これは非常に簡単(と、私は思うだろう、一般的な)のように思える必要がありますが、私は運がなかったしました。
これは私の一時的な解決策になるだろうが、私はこれにはおそらくいくつか正しい、自動/反射の教員がいると思った。 –