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