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