Ruby on Rails时间助手

时间:2011-08-09 18:48:09

标签: ruby-on-rails ruby timer form-helpers recipe

我正在开发我的第一个Rails应用程序。我有点卡住了时间。我正在研究食谱应用程序。我需要添加两个字段。

  • 准备时间
  • 烹饪时间

在这两个中,我想添加两个字段来计算准备餐点所需的总时间。

我接近它错误的方式,没有逻辑:(。基本上我有两个字段,我使用f.select选择预定义的时间。但我有这种方法的问题是,当添加两个,它忽略格里高利格式,例如40分钟+ 50分钟将变为90分钟而不是1小时30分。

我很感激社区的帮助。

1 个答案:

答案 0 :(得分:6)

一个简单的例子:

prep_time = 40.minutes
cook_time = 50.minutes

total_time = prep_time + cook_time
formatted_total_time = Time.at(total_time).gmtime.strftime('%I:%M')

# outputs 01:30 which is HOURS:MINUTES format

如果你想要90分钟代替:

formatted_total_time = total_time / 60

# outputs 90

更新

将此放在与您正在使用此视图的任何视图相关联的帮助文件中(即app/helpers/recipes_helper.rb

module RecipesHelper

  def convert_to_gregorian_time(prep_time, cook_time)
    # returns as 90 mins instead of 1hr30mins
    return (prep_time + cook_time) / 60
  end

end

然后你只需在你的视图中调用它(例如app/views/recipes/show.html.haml

# Note: this is HAML code... but ERB should be similar

%p.cooking_time
  = convert_to_gregorian_time(@recipe.prep_time, @recipe.cook_time)

如果您将数据库中的时间存储为整数(您应该这样做),那么您可以这样做:

%p.cooking_time
  = convert_to_gregorian_time(@recipe.prep_time.minutes, @recipe.cook_time.minutes)

其中@recipe.prep_time是一个值为40的整数,@recipe.cook_time是一个值为50的整数

,您的数据库架构看起来像:

# == Schema Information
#
# Table name: recipes
#
#  id                 :integer         not null, primary key
#  prep_time          :integer
#  cook_time          :integer
#  # other fields in the model...