【发布时间】:2013-08-30 02:56:13
【问题描述】:
我有一个带有事件的 Rails 应用程序。我的事件表有一个名为start_date 的字段,它属于日期时间类型。目前,当我使用慢性保存事件来解析 start_date 字段时,日期存储不正确(或至少返回不正确)。
示例:我保存了一个事件,并在 start_date 的文本字段中输入了9/14/13 at 9am。它保存了数据,刷新了页面,文本字段中的值为9/14/13 at 11am。 mysql表中的值为2013-09-14 16:00:00。
这里发生了什么?这只发生在我的服务器上,而不是在本地运行时发生。
应用程序.rb:
config.time_zone = 'Central Time (US & Canada)'
models/event.rb:
class Event < ActiveRecord::Base
belongs_to :user
attr_accessible :description, :name, :start_date_string
validate :name_not_blank
validate :start_date_not_blank
# Validate that the name is not blank
def name_not_blank
errors.add(:name, "Name can't be blank") unless !name.blank?
end
# Validate that the name is not blank
def start_date_not_blank
errors.add(:start_date, "Date and Time can't be blank") unless !start_date.blank?
end
# getter
def start_date_string
@start_date_string || start_date.in_time_zone.try(:strftime, "%m/%d/%Y at %I:%M %P")
end
# setter
def start_date_string=(value)
@start_date_string = value
self.start_date = parse_start_date
end
# parse the start_date
def parse_start_date
Chronic.parse(start_date_string)
end
end
helpers/application_helper.rb:
# Formats a date to words (i.e. March 20, 1980 at 10:00 am)
def spell_date_and_time(date)
date.strftime("%B %d, %Y at %I:%M %P")
end
edit.html.erb
<span class="timestamp"><%= spell_date_and_time(event.start_date) %></span>
【问题讨论】:
-
顺便说一句,真的不需要
parse_start_date,你可以只使用start_date_stringsetter。如果您使用的是文本字段,还要注意 nil 和空白时间值。
标签: mysql ruby-on-rails ruby-on-rails-3