2017-04-20 11 views
0

私のアプリでは、Heavyクラスに登録しているユーザーの平均用紙使用量を見たいと思っています。Ruby onレールアプリで.pluckと.averageを使用していますか?

userモデルhas_many :paperspaperモデルここbelongs_to :user

は、私がこれまでに得たものである:@heavy_users_testing = User.where(industry_type: 'Heavy').joins(:papers).where("papers.paper_type = 'Officepaper'").pluck(:paper_weight)

のユーザーのために重量Officepaper平均を取得するにはどこにしかしactive record .average、私はわからないんだけど重いカテゴリ?

誰かに助言してもらえますか?

+1

を行う必要がありpluck

@heavy_users_testing = User.where(industry_type: 'Heavy') .joins(:papers) .where(papers: { paper_type: 'Officepaper' }) .pluck('avg(paper_weight)') 

内のSQL avg機能を使用することができますが、すべてのユーザーの平均が必要ですまたは各ユーザーの平均? – Iceman

+0

indusrty_type 'Heavy'を持っているすべてのユーザに対して、' officepaper'タイプの平均用紙重量が必要です – Slowboy

答えて

2

あなたは/ユーザーごとの平均を必要とする場合は、あなたがgroup

@heavy_users_testing = User.where(industry_type: 'Heavy') 
    .joins(:papers) 
    .where(papers: { paper_type: 'Officepaper' }) 
    .group(:user_id) 
    .pluck('avg(paper_weight)') 
+0

'<%= @heavy_users_testing%>'では、出力は' [# ] 'コードの最後に' .to_f'を入れようとしましたが、 '@high_users_testing'にもしようとしましたが、エラーになります – Slowboy

+0

配列、 'pluck'は常に配列を返します。だから、あなたは '@ heavy_users_testing.first.to_f'をしなければならないでしょう。' '.....(。)最初に' ' – Iceman

+0

を追加しています。それは意味がありますが、どうすればそれを得ることができますか? Heavyクラスのすべてのユーザーのすべてのpaper_weightの平均? '.first'の使用は、配列の最初の部分だけを表示しています。 – Slowboy

関連する問題