繁体   English   中英

如何在Ruby on Rails中创建一种方法来计算每英里分钟

[英]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英里对我有效。

结果2

这是我的数据库架构。

  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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM