Opin juuri, että mahdollisimman paljon ei-kyselyistä-riippuvaa logiikkaa kannattaa painaa model-tasolle asti.
Halusin näyttää viewssä projektin kohdalla kuinka paljon yhteensä tavoitteista oli toteutettu. Minun piti siis jotenkin laskea yhteen jokaisen tavoitteen edistyminen-luku ja näyttää summa jaettuna suurimmalla mahdollisella edistyminen-luvulla.
Onnistuin tekemään sen Project modelissa eli \app\models\project.rb tiedostossa.
def nr_of_completed_goals
return self.goals.all.where('progress' => '100').length
end
def nr_of_uncompleted_goals
return self.goals.all.where('progress' => !'100').length
end
def total_completion_of_goals
@goals = self.goals.all
max_progress = @goals.length * 100.0
progress_total = 0.0
@goals.each do |g|
progress_total = progress_total + g.progress
end
return (progress_total / max_progress).round(2)
end
Näitä voi käyttää viewssä:
<td><%= project.nr_of_uncompleted_goals %> + <%= project.nr_of_completed_goals %>, total <%= project.total_completion_of_goals %></td>
En tiedä olisiko "kauniimpaa" lyhentää nuo jotenkin tuossa view:ssä käytettäessä vai onko ok laittaa noin. Toiminnallisuus on kuitenkin oikea.
Ei kommentteja:
Lähetä kommentti