2015-06-27 82 views
1

控制器提取來自深度嵌套的關聯數據,其中bilancino belongs_to :operativo這反過來belongs_to :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 %> 

然而正在生成一個空數組,但如果下方以下

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

將呈現。因此,表達式@bilancinos.select{ |i| i.operativo.cdg_id以某種方式缺少嵌套目標。

什麼是正確的語法?

回答

0

我懷疑你的問題是在這裏:

​​

例如,這是我在我的應用程序之一的控制檯中看到:

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.id } 
+0

我相信我嘗試過,但無濟於事(我在其他情況下成功執行了相同的合成方法)。我同時採取了改變我的模型結構,在較小的嵌套模型中繼承屬性 - 這增加了頻繁查詢的速度,併爲應用程序的目的更好地進行歸檔管理。爲了嚴謹的目的,我們會在這個測試案例中嘗試一下! – Jerome