23018


Ruby on Railsで開発をしています。

現在開発しているものには４つのモデルがあります。  
これらを各自A, B, C, Dだとした時にこれらの関係は  
BがAを参照、CがBを参照、DがCを参照しています。  
私がしたいのはAテーブルをviewでリストに表示する時にカラムを一個追加し、  
Aの各IDが持っているDを全部カウントした数値を表示させたいんです。  
どうしたらAのリストで各行が持っているDをカウントして表示できるか教えてください。


CC BY-SA 3.0
2016-03-11T04:33:34.087
23016
2016-03-11T05:37:14.823
10710
question
ruby-on-rails slim
railsで子テーブルの値をviewから使える方法

[code]

    class ModelA
      has_many :model_bs
    end  
    
    class ModelB 
      belongs_to :model_a
      has_many :model_cs
    end
    
    class ModelC
      belongs_to :model_b
      has_many :model_ds
    end
    
    class ModelD
      belongs_to :model_c
    end
    
[/code]

ということでしょうか？  
色々やりようはあると思いますが、 model_a の id を キーにした hash に、カウントを保存して使う。  
などはどうでしょうか？

コントローラで、ハッシュを作り

[code]

    model_a_list = ModelA.all
    model_a_ids_model_d_sizes = ModelD.joins(model_c: :model_b).group("model_bs.model_a_id").count
    
[/code]

view で呼び出す、とかです。

[code]

    - model_a_list do | model_a |
      = model_a_ids_model_d_sizes[model_a.id]
    
[/code]

他には、includes して array のサイズを測る、とかもあると思います。

[code]

    model_a_list = ModelA.includes(model_bs: { model_cs: :model_ds }).all
    
    - model_a_list do | model_a |
      = model_a.flat_map(&:model_bs).flat_map(&:model_cs).flat_map(&:model_ds).size
    
[/code]

のような感じです。

実際に動くかは確認していないです。スミマセン。


CC BY-SA 3.0
2016-03-11T05:37:14.823
23018
2016-03-11T05:37:14.823
7471
23016
answer