Rails模型递归json

时间:2012-10-23 11:04:34

标签: ruby-on-rails ruby

我有一个菜单模型,它有相同类型的子菜单。类似的东西:

  • 1级
    • 等级1.1
    • 等级1.2
  • 2级
    • level 2.1
    • ...

所以,我需要一种方法以递归的方式在我的json中包含所有级别。

1 个答案:

答案 0 :(得分:8)

Rails中的JSON通过两种方法工作:

as_json负责创建对象的哈希表示,而to_json将该哈希对象表示转换为JSON。

因此,您需要做的是在模型中定义as_json方法以包含您想要的内容。

def as_json
 {
   :other_options => value,
   :submenu => self.submenus.collect { |n| n.as_json }
 }
end

这是一个非常粗略的实现,但它会以递归方式访问所有子菜单(因为子菜单本身就是菜单)并将它们呈现为哈希,然后转换为JSON。