2017-11-23 9 views
0

Ich versuche, die Summe aller Bewertungen zu einem Beitrag hinzuzufügen. Aber ich bekomme einen Fehler: ArithmeticError: bad argument in arithmetic expression. Ich glaube, das ist, weil nicht alle Postratings damit verbunden haben. Und dann wird es nicht sum die Werte in diesen nicht vorhandenen Bewertungen sein.ArithmeticError bei Verwendung der Summe in einer zugeordneten Spalte

Wie würde ich die Bewertung auf 0 setzen, wenn keine ratings mit einem post in der Datenbank verknüpft ist?

Abfrage:

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

Schemen:

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 

Antwort

0

Dank der Elixir Slack Kanal ich es coalesce() mithilfe der Postgres-Funktion zu lösen verwaltet.

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.

Bewaffnet mit diesem neu gewonnenen Wissen schrieb ich meine Abfrage und es scheint, wie beabsichtigt zu arbeiten:

from post in Post, 
left_join: rating in assoc(post, :ratings), 
group_by: post.id, 
select: %{post | rating: sum(fragment("coalesce(?,0)", rating.value))} 
Verwandte Themen