Ruby on Rails временный помощник - PullRequest
3 голосов
/ 09 августа 2011

Я работаю над своим первым Rails-приложением. Я немного застрял со временем. Я работаю над рецептом приложения. Мне нужно добавить два поля.

  • Время приготовления
  • Время приготовления

Из этих двух я хотел бы добавить два поля, чтобы указать общее время, необходимое для приготовления еды.

Я подошел к нему неправильно, у него нет логики :(. По сути, у меня есть два поля, и я использовал f.select для выбора предопределенного времени. Но проблема, с которой я столкнулся при таком подходе, заключается в том, что при добавлении двух он игнорирует григорианский формат, например, 40 минут + 50 минут станут 90 минутами вместо 1 часа 30.

Буду признателен за любую помощь сообщества.

1 Ответ

6 голосов
/ 09 августа 2011

Быстрый пример:

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...
...