2

我正在寻找一种从包含多个变量的控制器返回 xml 或 json 的好方法。例如:

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

    respond_with @articles
end

我如何最好地将 @ad 和 @map 变量添加到 @articles 数组?我见过有人使用合并功能,但我不确定这是否是我正在寻找的。只想知道哪种方式最标准,最灵活,最干燥。谢谢!

注意:我知道响应会根据添加到 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 语言)gem(castgithub)。它为您提供了一种 DSL,用于在模板中定义 JSON/XML 响应的结构(就像 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 回答