Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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 具有引用对象树的查询结果-Ruby on Rails_Ruby On Rails_Ruby_Json_Activerecord - Fatal编程技术网

Ruby on rails 具有引用对象树的查询结果-Ruby on Rails

Ruby on rails 具有引用对象树的查询结果-Ruby on Rails,ruby-on-rails,ruby,json,activerecord,Ruby On Rails,Ruby,Json,Activerecord,我目前很难找到解决RubyonRails项目中问题的方法 我有以下模型结构: 基本上,我想做一个查询,返回所有模型中的所有信息,根据模型关系进行结构化 我搜索了几个小时,找不到任何简单的解决方案。。。(甚至不复杂)。我不知道我是否使用了正确的搜索关键字来解决我的问题,但我真的找不到任何有效的搜索关键字 对于部分解决方案(仅获取房间和照片),我尝试了以下方法: Room.all.includes(:photos) 根据我的发现,我认为这可能是解决方案,但它只返回有关房间的信息,而不是照片,因此

我目前很难找到解决RubyonRails项目中问题的方法

我有以下模型结构:

基本上,我想做一个查询,返回所有模型中的所有信息,根据模型关系进行结构化

我搜索了几个小时,找不到任何简单的解决方案。。。(甚至不复杂)。我不知道我是否使用了正确的搜索关键字来解决我的问题,但我真的找不到任何有效的搜索关键字

对于部分解决方案(仅获取房间和照片),我尝试了以下方法:

Room.all.includes(:photos)

根据我的发现,我认为这可能是解决方案,但它只返回有关房间的信息,而不是照片,因此这可能与我需要的方法完全不同。

修订版

你得到了什么:

Room.all.includes(photos: :points).to_json

有关更多信息,请参见修订版:

你得到了什么:

Room.all.includes(photos: :points).to_json

有关更多信息,请参见

如果您达到临界点,只需编写一系列.each循环,然后手动围绕它们构建json字符串可能会更容易

Room.all.each do |room|
  room.photos.each do |photo|
    photo.points.each do |point|
      // inner loop
    end
  end
end

如果到了临界点,只需编写一系列.each循环,然后手动围绕它们构建json字符串,可能会更容易

Room.all.each do |room|
  room.photos.each do |photo|
    photo.points.each do |point|
      // inner loop
    end
  end
end

@dankohn的答案对于急切地加载嵌套关联是正确的,但我相信您需要更多的东西来使用to_json。我认为问题在于,json只查看原始对象集,而不知道所加载的关联。但幸运的是,json是一个方法调用,它可以将include作为一组散列选项。(在原始代码中有一个问题,@norim_13帮助更正。谢谢!!)

以下是as_json的文档

在to_json的源代码中,您可以看到它将其选项散列传递给as_json

@dankohn的答案对于急切地加载嵌套关联是正确的,但我相信您需要更多的东西才能使用to_json。我认为问题在于,json只查看原始对象集,而不知道所加载的关联。但幸运的是,json是一个方法调用,它可以将include作为一组散列选项。(在原始代码中有一个问题,@norim_13帮助更正。谢谢!!)

以下是as_json的文档

在to_json的源代码中,您可以看到它将其选项散列传递给as_json

“在Room上找不到名为“points”的关联;可能是您拼错了?”它将表“points”与“rooms”关联并引发错误,因为没有直接连接…我还尝试了:Room.all.includes(:photos)。to_json,但尽管它不会引发任何错误,但它只返回有关rooms的信息,不是里面的照片。我已经看到你修改的答案并检查了链接,似乎你的建议是我需要的,但它不起作用。。。结果是,同样,只有房间信息。。。(和房间一样)当然可以。我的模型中没有它,我只是在写问题时忘了删除它,因为我是从以前的类中复制粘贴的。“在Room上找不到名为“points”的关联;可能是您拼错了?”它将表“points”与“rooms”相关联由于没有直接连接,所以引发了一个错误…我也尝试了:Room.all.includes(:photos)。to_json,但尽管它没有引发任何错误,但它只返回关于房间的信息,而不返回其中的照片。我看到了你修改后的答案并检查了链接,似乎你的建议是我需要的,但它不起作用。。。结果是,同样,只有房间信息。。。(和房间一样)当然可以。我的模型中没有它,我只是在写问题时忘了删除它,因为我是从以前的课程中复制粘贴的。注意这一点。如果您不急于加载,这将产生一些疯狂的N+1查询。谢谢您的建议。尽管有人已经给了我最“正确”的方法,但我可能会使用类似的方法,以便为某些对象提供自定义键。请注意这一点。如果您不急于加载,这将产生一些疯狂的N+1查询。谢谢您的建议。尽管有人已经给了我最“正确”的方法,但我可能会使用类似的方法,以便为某些对象提供自定义键。第一个链接非常有用。所需的代码不是您所建议的,而是类似的代码。我会建议用工作代码编辑这篇文章。太棒了,很高兴我接近了。有人帮我更新了它,我编辑了它并给@norim_13评分。感谢第一个链接非常有用。所需的代码不是您所建议的,而是类似的代码。我会建议用工作代码编辑这篇文章。太棒了,很高兴我接近了。有人帮我更新了它,我编辑了它并给@norim_13评分。谢谢如果你想接受,我用你建议的编辑更新了我的答案如果你想接受,我用你建议的编辑更新了我的答案
Room.all.to_json({:include => { :photos => {:include => { :points => {}} }}})