在轨道上的ruby中附加到Json数组

时间:2015-09-09 06:18:59

标签: ruby-on-rails json

我正在使用backbone.js作为前端,从这样的控制器接收json结果

def index
    myEntry = Entry.all
    respond_with myEntry.to_json()
end

生成的json数组是对象的集合,如下所示

0:Object
  id:1
  name:matz
1:object
  id:2
  name: hilary

现在,每个名称都有一个使用act-as-taggable-on gem存储的额外标记字段。要访问任何条目的标记,我必须使用 Entry.find(1).tag_list。 我想从上面将每个标记的结果附加到其各自的对象,以获得类似这样的结果

0:Object
  id:1
  name:matz
  tag:friend,rich
1:object
  id:2
  name: hilary
  tag:intelligent

2 个答案:

答案 0 :(得分:2)

这应该适合你:

render json: User.all.to_json(include: :tags)

或者(只是标签名称):

render json: User.all.to_json(methods: :tag_list)

答案 1 :(得分:2)

来自@dimakura的完美答案。但是如果你想在你的json数组中包含一些与你的结果没有直接关联的东西,或者由于更复杂的原因,这里有另一种方式

  • 创建一个空数组
  • 遍历结果数组
    • 在每个循环中向数组追加所需的哈希值
  • 将数组转换为json

示例代码

myEntry = Entry.all
myhash = []
myEntry.each do |index|
   myhash << {name: index.name,tag_list: index.tag_list}
end

respond_with myhash.to_json