torstai 11. joulukuuta 2014

Mallin lihotus

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