Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 递归json的Rails模型_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 递归json的Rails模型

Ruby on rails 递归json的Rails模型,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个菜单模型,它有相同类型的子菜单。比如: 一级 1.1级 1.2级 二级 2.1级 因此,我需要一种方法以递归的方式将所有级别包含在json中。Rails中的json通过两种方法工作: as_json负责创建对象的哈希表示,而to_json则将该哈希对象表示转换为json 因此,您需要做的是在模型中定义as_json方法,以包含您想要的内容 def as_json { :other_options => value, :submenu => self

我有一个菜单模型,它有相同类型的子菜单。比如:

  • 一级
    • 1.1级
    • 1.2级
  • 二级
    • 2.1级

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

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。

我不理解您的问题。你能更详细地解释一下你想做什么吗?如果您只想将ActiveRecord记录转换为JSON,只需调用
即可。彼此彼此。这些数据是如何存储的?您使用什么样的数据结构?如果它在散列中,那么您可以像max_w所说的那样将其转换为json(这将以递归方式工作)。否则,您很可能会使用.map()或.collect()之类的东西以某种形式获取它,您可以使用它来生成json。但是我们需要知道更多的细节来向您展示如何做到这一点