UI aracılığıyla kullanıcılardan veri almam gereken bir DB uygulamasına sahibim, herhangi bir hıçkırık olmadan yapabileceğim bir DB'de saklamak. Ancak depolanan verileri DB'den almalı ve üzerlerinde bazı hesaplamalar yapmalı ve daha sonra bunları bir grafik kütüphanesi kullanarak çizmeliyim.Rails Uygulamasında Hesaplama Mantığı
Bu hesaplama mantığının genellikle modele ait olduğunu okudum, dolayısıyla model dosya kodum aşağıda listelenmiştir. Ama şimdi, sonuç dizilerimi bir görünüme nasıl aktaracağım ve nasıl çizileceğini merak ediyorum. Temelde arabağlantıyı doğru alamıyorum. Bu konuda herhangi bir yardım çok takdir edilecektir.
class Shot < ActiveRecord::Base
def self.calculate(param)
#fetch_all_three_shots
#Performs Query aginst DB and returns the same data structure depicted in 'shots' array
#shots = Shot.all.collect{|a| [a.c1,a.c2,a.c3,a.c4,a.c5,a.c6,a.c7,a.c8,a.c9,a.c10,a.c11,a.c12]}
#shots = [[1.55, 1.58, 1.59, 1.58, 1.53, 1.57, 1.57, 1.55, 1.57, 1.6, 1.62, 1.6],
# [1.54, 1.55, 1.58, 1.57, 1.49, 1.56, 1.55, 1.55, 1.54, 1.59, 1.61, 1.6],
# [1.55, 1.57, 1.59, 1.57, 1.51, 1.56, 1.56, 1.55, 1.56, 1.59, 1.62, 1.59]]
shots = fetch_all_three_shots
#Declaration of Array for all Data Sets Goes here...
cavity_arr = Array.new
avgpartwt_arr = Array.new
fillseq_arr = Array.new
imbalance_arr = Array.new
max_imbalance_arr = Array.new
intermediate_arr = Array.new
fillmeanwt_arr = Array.new
statistics_shotwise_arr = Array.new
statistics_bof_arr = Array.new
#Formulation of Cavity Array Goes Here...
cavity_arr = (1 .. 12).to_a
#Looping for Calculation of Average Part Weight Goes Here...
for i in (0 .. (shots[0].size - 1))
avgpartwt_arr.push((shots[0][i] + shots[1][i] + shots[2][i])/3)
end
#Rank Calculation Logic Goes Here....
fillseq_arr = avgpartwt_arr.map{|value| avgpartwt_arr.select{|item| item > value}.size + 1}
#Looping for Calculation of Percentage Imbalance Goes Here...
for i in (0 .. (avgpartwt_arr.size - 1))
imbalance_arr.push(((avgpartwt_arr.max - avgpartwt_arr[i])/avgpartwt_arr.max) * 100)
end
#Looping for Maximum Imbalance Array Goes Here...
for i in (0 .. (imbalance_arr.size - 1))
if imbalance_arr[i] != imbalance_arr.max
max_imbalance_arr.push(0)
else
max_imbalance_arr.push(cavity_arr[i])
end
end
#Formulation of Intermediate Array Goes Here...
intermediate_arr = [((avgpartwt_arr.mean).round(3))] * 12
#Formulation of Fill Weight Mean Array Goes Here...
for i in (0 .. (avgpartwt_arr.size - 1))
fillmeanwt_arr.push(((intermediate_arr[i] - avgpartwt_arr[i])/intermediate_arr[i]) * 100)
end
#Looping for Calculation of Shotwise Statistical Parameters Across Shots Goes Here...
for i in (0 .. (shots.size - 1))
statistics_shotwise_arr.push([shots[i].max, shots[i].min, shots[i].range, shots[i].mean, shots[i].standard_deviation])
end
#Formulation of Balance of Fill Parameters Goes Here...
cavmaximbalance = max_imbalance_arr.max
maximbalance = imbalance_arr.max
avgimbalance = imbalance_arr.mean
rangedrop = (((statistics_shotwise_arr[0][2] - statistics_shotwise_arr[2][2])/statistics_shotwise_arr[0][2]) * 100)
end
scope :fetch_all_three_shots , -> {all.collect{|a| [a.c1, a.c2, a.c3, a.c4, a.c5 ,a.c6, a.c7, a.c8, a.c9, a.c10, a.c11, a.c12]}}
end
Merhaba Dharam, Doğrudan model dosyasında yaptığım gibi diziler ilan edebilir miyim. İkinci soru şu anki haliyle benim fetch_all_three_shots veriyi DB'den alacak ve 'çekim' değişkenimde kullanılabilir hale getirecek mi? Ben raylar ve dolayısıyla bu noob soruları için bir acemi duyuyorum. –
Evet, model dosyasında bildirdiğiniz gibi 'dizileri' bildirebilirsiniz. Ancak bu yöntemden döndürülen tek şey, yöntemin son satırı olan "rangedrop". ruby, dolaylı olarak yöntemin son ifadesini döndürür. Yani bu dizilerin kullanılabilir olmasını istiyorsunuz, sonra onları son ifade olarak ilan etmelisiniz, [cavity_arr, avgpartwt_arr, ...] gibi bir şey. – Dharam
'fetch_all_three_shots', 'rayların' sınıf yöntemi olarak kullanılabilir hale getirdiği ve 'hesapla' yöntemini sınıf yöntemi olarak açıkladığınız bir kapsamdır, herhangi bir sorun görmüyorum. Genel olarak, bu iyi bir tasarım olmayabilir, çünkü test etmek zor olacak çok fazla şey yapan bir yönteminiz var. – Dharam