Ruby 通过深度嵌套关联映射值

Ruby 通过深度嵌套关联映射值,ruby,ruby-on-rails-3.2,Ruby,Ruby On Rails 3.2,控制器从深度嵌套的关联中提取数据,其中bilancino属于:operativo,而又属于:cdg: @cdgs = Cdg.order("id ASC").all @bilancinos = Bilancino.joins(:operativo).order('cdg_id ASC').all (其中包含where条款) 但是,在渲染时 <% @cdgs.each do |cdg| %> <% @cdgs_for_bilancino = @bilancinos.sele

控制器从深度嵌套的关联中提取数据,其中
bilancino属于:operativo
,而
又属于:cdg

@cdgs = Cdg.order("id ASC").all
@bilancinos = Bilancino.joins(:operativo).order('cdg_id ASC').all
(其中包含where条款)

但是,在渲染时

<% @cdgs.each do |cdg| %>
  <% @cdgs_for_bilancino = @bilancinos.select{ |i| i.operativo.cdg_id == cdg } %>
  <%= @cdgs_for_bilancino.each do |bilancino| %> XX <% end %>
  <%= number_with_precision(@cdgs_for_bilancino.map(&:saldo).sum, :precision => 0, :delimiter => "\u00a0")  %>
<% end %>

XX
0,:分隔符=>“\u00a0”)%>
正在生成一个空数组,但是如果在下面

<% @bilancinos.each do |bilancino| %>
  <%= bilancino.operativo.cdg.conto %> <%= bilancino.saldo %><br />
<% end %>


将呈现。因此表达式
@bilancinos.select{i | i.operativo.cdg_id
不知何故缺少嵌套目标


正确的语法是什么?

我怀疑您的问题在于:

@bilancinos.select{ |i| i.operativo.cdg_id == cdg }
例如,这是我在我的一个应用程序的控制台中看到的:

irb(main):022:0> recruiter = Recruiter.find_by_id(1)
  Recruiter Load (0.9ms)  SELECT  "recruiters".* FROM "recruiters" WHERE "recruiters"."id" = $1 LIMIT 1  [["id", 1]]
=> #<Recruiter id: 1>
irb(main):023:0> ping = Ping.find_by_id(1)
  Ping Load (0.9ms)  SELECT  "pings".* FROM "pings" WHERE "pings"."id" = $1 LIMIT 1  [["id", 1]]
=> #<Ping id: 1, recruiter_id: 1>
irb(main):024:0> recruiter.pings.select{ |p| p.id == ping }
  Ping Load (0.5ms)  SELECT "pings".* FROM "pings" WHERE "pings"."recruiter_id" = $1  [["recruiter_id", 1]]
=> []
irb(main):025:0> recruiter.pings.select{ |p| p.id == ping.id }
=> [#<Ping id: 1, recruiter_id: 1>]

我怀疑你的问题在这里:

@bilancinos.select{ |i| i.operativo.cdg_id == cdg }
例如,这是我在我的一个应用程序的控制台中看到的:

irb(main):022:0> recruiter = Recruiter.find_by_id(1)
  Recruiter Load (0.9ms)  SELECT  "recruiters".* FROM "recruiters" WHERE "recruiters"."id" = $1 LIMIT 1  [["id", 1]]
=> #<Recruiter id: 1>
irb(main):023:0> ping = Ping.find_by_id(1)
  Ping Load (0.9ms)  SELECT  "pings".* FROM "pings" WHERE "pings"."id" = $1 LIMIT 1  [["id", 1]]
=> #<Ping id: 1, recruiter_id: 1>
irb(main):024:0> recruiter.pings.select{ |p| p.id == ping }
  Ping Load (0.5ms)  SELECT "pings".* FROM "pings" WHERE "pings"."recruiter_id" = $1  [["recruiter_id", 1]]
=> []
irb(main):025:0> recruiter.pings.select{ |p| p.id == ping.id }
=> [#<Ping id: 1, recruiter_id: 1>]

我相信我试过了,但没有成功(我在其他情况下成功地执行了相同的语法方法)。同时,我求助于更改我的模型结构,在嵌套较少的模型中继承属性,这增加了频繁查询的速度优势,并为应用程序的目的提供了更好的存档管理。为了严格起见,我将尝试在这一个中使用测试用例!我相信我尝试过,但没有任何效果(我在其他实例中成功地执行了相同的语法方法)。同时,我求助于更改我的模型结构,在嵌套较少的模型中继承属性-这增加了频繁查询的速度优势,并为应用程序的目的提供了更好的存档管理。为了严格起见,我将尝试在这一个中使用测试用例!