[英]How to create a method to calculate minutes per mile in Ruby on Rails
在我的Rails 4.2.6 / Ruby 2.2.4项目中,我有一个有氧运动模型,其中包含持续时间,距离和平均步速字段。 “持续时间”和“平均速度”是时间数据类型; “距离”是十进制数据类型。 我需要帮助来编写一种方法,该方法可以根据持续时间和距离字段中用户的输入来计算用户的平均步速(每英里分钟)。
*编辑*
我的有氧运动形式(_form.html.erb)中的持续时间和距离字段:
<div class="cardio_duration">
<%= f.input :duration do %> <br>
<%= f.time_select :duration, :include_blank => true, include_seconds: true %>
<% end %>
</div>
<div class="cardio-time">
<%= f.input :distance, :include_blank => true %>
<% end %>
</div>
到目前为止,这是我在有氧运动模型中编写的代码:
before_save { self.average_pace = self.calculate_average_pace } # calls calculate average pace method
我了解到,在计算每英里分钟数时,时间因素是最重要的因素。 这是我编写的方法:
def calculate_average_pace
duration = self.duration
distance = self.distance
average_pace = duration / distance
end
当我执行此方法时,它会产生以下错误:
undefined method `/' for 2000-01-01 16:50:00 UTC:Time
我正在尝试执行以下操作:26分钟/ 1.17英里,等于每英里22.29分钟。 我应该如何更改代码以解决此问题? 感谢您的帮助和解释。
**编辑**
这是相关的数据库模式:
create_table "cardio_exercises", force: :cascade do |t|
...
t.datetime "created_at"
t.datetime "updated_at"
t.time "duration"
t.decimal "distance"
t.time "average_pace"
end
您正在收到undefined_method错误,因为您试图将Time
除以Decimal
。 只能对数值进行除法。
我试图达到这种功能。
# _form.html
# ...
<div class="field">
<%= f.label :duration %><br>
<%= f.time_select :duration, include_blank: false, include_seconds: true %>
</div>
# ...
# Cardio model
class Cardio < ActiveRecord::Base
before_save :set_mpm
def set_mpm
# find minutes from time entered by user
mins = duration.hour * 60 + duration.min + duration.sec / 60
self.mpm = mins / distance
end
end
# controller
def create
@cardio = Cardio.new(cardio_params)
respond_to do |format|
if @cardio.save
format.html { redirect_to @cardio, notice: 'Cardio was successfully created.' }
format.json { render action: 'show', status: :created, location: @cardio }
else
format.html { render action: 'new' }
format.json { render json: @cardio.errors, status: :unprocessable_entity }
end
end
end
这是结果
那对你有用吗?
更新
1小时10英里对我有效。
这是我的数据库架构。
create_table "cardios", force: :cascade do |t|
t.time "duration"
t.decimal "distance"
t.decimal "mpm"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.