我有一个基本功能,它为杠铃举重采用不同的重量和代表值,并将其转换为估计的一个代表最大值,它存储在我的数据库中。以下是代码目前的样子:
if deadlift_reps != 1
self.deadlift = deadlift_wt * deadlift_reps * 0.0333 + deadlift_wt
else
self.deadlift = deadlift_wt
end
if squat_reps != 1
self.squat = squat_wt * squat_reps * 0.0333 + squat_wt
else
self.squat = squat_wt
end
if benchpress_reps != 1
self.benchpress = benchpress_wt * benchpress_reps * 0.0333 + benchpress_wt
else
self.benchpress = benchpress_wt
end
if overheadpress_reps != 1
self.overheadpress = overheadpress_wt * overheadpress_reps * 0.0333 + overheadpress_wt
else
self.overheadpress = overheadpress_wt
end
我显然在这个代码块中重复了很多,但是无法弄清楚如何将其分解并插入方法名称。我尝试过使用带
的数组 lifts = [deadlift, squat, benchpress, overheadpress]
但是当我尝试使用每个对此进行字符串插值时,我收到的错误是提升没有这种方法。
有人可以就如何继续提供任何建议吗?
编辑:
我试图做的循环是:
lifts = [deadlift, squat, benchpress, overheadpress]
lifts each do |lift|
if '#{lift}_reps' !=1
self.#{lift} = '#{lift}_wt' * '#{lift}_reps' * 0.0333 + '#{lift}'_wt
else
self.#{lift} = '#{lift}_wt'
end
end
我可以看到为什么这不起作用,但是,使用类似的想法,我将如何使它工作?
答案 0 :(得分:0)
我会创建一个私有方法来计算每一部分:
if deadlift_reps != 1
...
end
使用 assign_attributes Active记录方法将值分配给不同的字段(deadlift,squat,benchpress,overheadpress)。
这是代码,我没有测试它,但它应该可以工作:
[["deadlift", 20, 8],
["squat", 10, 12],
["benchpress", 30, 6],
["overheadpress", 20, 10]]).each do |exercize, wt, reps|
set_exercize(exercize, wt, reps)
end
private
def set_exercize(exercize, wt, reps)
value = reps != 1 ? wt * reps * 0.0333 + wt : wt
self.assign_attributes(exercize => value)
end
我希望它可以帮到你。