#ruby-on-rails #ruby-on-rails-4 #fullcalendar
#ruby-on-rails #ruby-on-rails-4 #полный календарь
Вопрос:
Я использую плагин jquery под названием Fullcalendar (v2.02), который предоставляет объекты datetime как ISO8601.
Я могу легко изменить объект datetime на iso8601, просто используя date_object.iso8601 (простой метод ruby).
Проблема, с которой я сталкиваюсь, заключается в том, что когда Fullcalendar выдает мне диапазон дат и времени, скажем, start = 1401058800 и end = 1404687600 (мой календарь на июнь), мне затем нужно получить эти начальные и конечные значения в формате даты, чтобы я мог запросить свою таблицу собраний, чтобы вернуть все экземпляры собраний, которые происходят в течение этого времени.
В Rails 4.1.1 следующая функция работала нормально:
def self.format_date(date_time)
date_time.to_datetime
end
Но в Rails 4.1.2 он возвращает ошибку (при попытке преобразовать время начала или окончания iso8601):
ArgumentError - invalid date
Кто-нибудь знает, пожалуйста, как я могу преобразовать (в Rails 4.1.2) объект даты и времени iso8601 в объект даты и времени, с помощью которого я могу запрашивать свою базу данных?
Формат таблицы собраний следующий:
# == Schema Information
#
# Table name: meetings
#
# id :integer not null, primary key
# title :string(255)
# starts_at :datetime
# created_at :datetime
# updated_at :datetime
# description :string(255)
# ends_at :datetime
# user_id :integer
# all_day :boolean
Область действия:
scope :between, ->(start_time, end_time, user_id) {
where(starts_at: (Meeting.format_date(start_time)..Meeting.format_date(end_time)),
user_id: user_id)
}
Ответ №1:
Попробуйте эти:
Time.at(1401058800).to_datetime
Time.at(1401058800).to_date
Или, если быть точным:
def self.format_date(date_time)
Time.at(date_time.to_i).to_datetime
end
Комментарии:
1. Боюсь, что нет, ошибка: TypeError — не удается преобразовать строку в точное число: activesupport (4.1.2) lib /active_support /core_ext / time / calculations.rb: 44: в
at_with_coercion' app/models/meeting.rb:51:in
format_date’ app /models /meeting.rb: 28: в `блоке в <class:Meeting>’2. @десять раз попробуйте отредактированную версию. Это временная метка, верно?