2

複数の変数を含むコントローラーからxmlまたはjsonを返す良い方法を探しています。例えば:

def index
    @ad = Ad.some_annoying_ad
    @map = Map.some_map_for_something
    @articles = Articles.trending

    respond_with @articles
end

@adと@mapvarを@articles配列に追加するにはどうすればよいですか?マージ機能を使用している人を見たことがありますが、それが私が探しているものかどうかはわかりません。どちらの方法が最も標準的で柔軟性があり、DRYであるかを知りたいだけです。ありがとう!

注:respond withは、URLに追加されたファイル拡張子に応じて、結果をxmlまたはjsonに自動的にフォーマットすることを認識しています。ありがとう!

4

2 に答える 2

7

@ ad、@ mapをマージする代わりに、作成して新しいハッシュを作成し、それに配列を追加します。

respond_with({:ad => @ad, :map => @map, :article => @article})

すべてのデータをグループでレンダリングするだけです。

于 2012-04-25T06:42:42.940 に答える
1

RABL(Ruby API Builder Languageの略)gem(castgithub)をご覧になることをお勧めします。テンプレートでJSON/XML応答の構造を定義するためのDSLを提供します(HamlやCoffeeScriptのように)。

あなたの場合、それは次のようになります:

# in *.json.rabl or *.xml.rabl

object false
child(@ad) { attributes :field1, :field2 }
child(@map) { attributes :field3, :field4 }
child(@article) { attributes :body => :content } # remap is easy!

コードを乾燥させるための部分的なサポートもあります。試す価値があります。

于 2012-04-25T08:14:38.300 に答える