2017-11-23 17 views
0

投稿にすべての評価の合計を加算しようとしています。しかし、エラーが発生しています:ArithmeticError: bad argument in arithmetic expressionPostにはすべてratingsが関連付けられているわけではないため、それは信じています。そして、それらの存在しない評価の値をsumにすることはできません。関連する列で合計を使用した場合の算術エラー

データベースにpostと関連付けられたratingsがない場合、評価を0に設定するにはどうすればよいですか?

問合せ:

from post in Post, 
left_join: rating in assoc(post, :ratings), 
group_by: post.id, 
select: %{post | rating: sum(rating.value)} 

スキーマ:

schema "posts" do 
    field :rating, :integer, virtual: true 
    has_many :ratings, MyApp.Rating 
end 

schema "ratings" do 
    field :value, :integer 
    belongs_to :post, MyApp.Post 
end 

答えて

0

私はPostgresの機能coalesce()を使用することによってそれを解決するために管理エリクサースラックチャンネルに感謝します。この新発見の知識を持つ

The COALESCE function returns the first of its arguments that is not null. Null is returned only if all arguments are null. It is often used to substitute a default value for null values when data is retrieved for display.

武装は、私は私のクエリを書き直し、意図したとおりに動作するようです:

from post in Post, 
left_join: rating in assoc(post, :ratings), 
group_by: post.id, 
select: %{post | rating: sum(fragment("coalesce(?,0)", rating.value))} 
関連する問題