Ruby on rails rails-显示嵌套的查找哈希

Ruby on rails rails-显示嵌套的查找哈希,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我正在尝试显示此查找的输出- @test = User.joins(:plans => [:categories => [:project => :presentations]]).where(current_user.id) 这是我的输出循环 <% @test.each do |p| %> <%= p.plans %> <% p.plans.each do |d| %> <%= debug(d) %>

我正在尝试显示此查找的输出-

@test = User.joins(:plans => [:categories => [:project => :presentations]]).where(current_user.id)
这是我的输出循环

<% @test.each do |p| %>
  <%= p.plans %>
  <% p.plans.each do |d| %>
    <%= debug(d) %>
    <% d.categories.each do |e| %>
      <% e.project.each do |r| %>
       <%= debug(r) %>
      <% end %>
<% end %>
  <% end %>
<% end %>
我的关系是这样的

使用者 有很多:用户计划 计划 有很多:用户计划 _和_是否属于多个类别 类别 有一个:项目 有很多计划吗 项目 有多个:演示文稿,:依赖=>:全部删除 演示 属于:项目

我需要改变我的发现吗

谢谢,亚历克斯

类别有一个:项目

因此它是单个对象而不是集合,因此没有
每个
方法

类别有一个:项目


因此,它是单个对象而不是集合,因此没有
每个
方法。

根据您的关系定义,类别只有一个项目,那么您为什么要迭代e.project?如果只想显示调试输出,请替换

<% e.project.each do |r| %>
  <%= debug(r) %>
<% end %>


但如果您想更深入地了解演示文稿,请执行以下操作:

<%= debug(e.project) %>
<% e.project.presentations.each do |presentation| %>
  <%= debug(presentation) %>
<% end %>

根据您的关系定义,Category只有一个项目,那么您为什么要迭代e.project?如果只想显示调试输出,请替换

<% e.project.each do |r| %>
  <%= debug(r) %>
<% end %>


但如果您想更深入地了解演示文稿,请执行以下操作:

<%= debug(e.project) %>
<% e.project.presentations.each do |presentation| %>
  <%= debug(presentation) %>
<% end %>

您的问题是您正在调用数组方法。每个方法都在单个对象上

category.project将为您提供单个项目对象,对吗?这不是一个数组,所以不能对其分别调用

替换此项:

<% e.project.each do |r| %>
 <%= debug(r) %>
<% end %>
在这里,还有一些建议:使用描述性变量名。为什么“p”代表测试,“d”代表计划,“e”代表类别,等等?变量名应该告诉您对象是什么。类似地,我希望变量@test保存一个测试对象。在代码中,它似乎是一个数组。对包含该类型对象集合的变量使用复数变量名-例如@plans将是一个计划对象数组

乙二醇



这不是更可读吗?

您的问题是调用数组方法。每个方法都在单个对象上

category.project将为您提供单个项目对象,对吗?这不是一个数组,所以不能对其分别调用

替换此项:

<% e.project.each do |r| %>
 <%= debug(r) %>
<% end %>
在这里,还有一些建议:使用描述性变量名。为什么“p”代表测试,“d”代表计划,“e”代表类别,等等?变量名应该告诉您对象是什么。类似地,我希望变量@test保存一个测试对象。在代码中,它似乎是一个数组。对包含该类型对象集合的变量使用复数变量名-例如@plans将是一个计划对象数组

乙二醇



这不是更具可读性吗?

那是我的黑客行为,有点懒惰完成版看起来像你的:)那是我的黑客行为,有点懒惰完成版看起来像你的:)
<% e.project.each do |r| %>
 <%= debug(r) %>
<% end %>
debug(e.project)
<% @tests.each do |test| %>
  <% test.plans.each do |plan| %>
    <%= debug(plan) %>
    <% plan.categories.each do |category| %>
     <%= debug(category.project) %>
    <% end %>
  <% end %>
<% end %>