Rails 5, как добавить HH: MM (строку) в созданный_ат? - PullRequest
0 голосов
/ 18 марта 2020

У меня есть время в строковых форматах 05:50 (Часы: Минуты) Я хочу добавить это в поле create_at (ср., 16 ноября 2016 14:04:37 IST +05: 30) в базе данных.

Мне нужно что-то вроде 14:04:37 (ЧЧ: ММ: СС) + 05:50 (ЧЧ: ММ)

Я пробовал это с методами strftime, но не удалось.

Как я могу это сделать?

1 Ответ

0 голосов
/ 18 марта 2020

Используйте ActiveSupport :: Duration :

string = '05:50'  
duration = ActiveSupport::Duration.parse(
  # converts string into a ISO8601 duration
  "PT" + ['H', 'M'].zip(string.split(':')).join  
)
puts duration.since(model.created_at) # 5 hours and 50 minutes in the future

Не то, чтобы это на самом деле ничего не обновляло, так как ваш вопрос очень расплывчатый. Если вы хотите обновить существующие записи, вам нужно позвонить:

model.update(created_at: duration.since(model.created_at))

Для новых записей вы можете использовать обратный вызов, чтобы изменить его в течение жизненного цикла:

class MyModel < ActiveRecord::Base
  attribute_accessor :advance_by
  before_validate :advance_created_at, if: ->{ advance_by.present? }

  private
  def advance_created_at
    duration = ActiveSupport::Duration.parse(
        # converts string into a ISO8601 duration
        "PT" + ['H', 'M'].zip(@advance_by.split(':')).join  
    )
    self.advance_by = nil # prevents this from happening repeatedly
    self.created_at = duration.since(created_at)
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...