#ruby-on-rails #database #datetime
#ruby-on-rails #База данных #datetime
Вопрос:
Я замечаю, что мое приложение rails 3 сохраняет поле datetime без временной части, только дату. Я работаю с mysql.
Моя миграция выглядит следующим образом:
class CreateCampaigns < ActiveRecord::Migration
def self.up
create_table :campaigns do |t|
t.string :name
t.string :subject
t.string :from_name
t.string :from_email
t.string :reply_to
t.string :location
t.datetime :send_in_date_time
t.string :message
t.string :test_email
t.boolean :send_now
t.timestamps
end
end
def self.down
drop_table :campaigns
end
end
Допустим, я создаю новую кампанию и устанавливаю поле send_in_date_time
campaign = Campaign.new
campaign.send_in_date_time = Time.now
campaign.save
В базе данных хранится это:
2011-09-20 00:00:00
Также create_at и modified_at не сохраняют время. Я протестировал базу данных, и она отлично работает, чтобы сохранить правильное время.
Редактировать:
Проверяя журналы, я обнаружил, что активная запись устанавливает дату без указания времени. Активная запись плохо поддерживает datetime?
UPDATE `campaigns` SET `updated_at` = '2011-06-10', `send_in_date_time` = '2011-09-19' WHERE `campaigns`.`id` = 1
Ответ №1:
Я нашел решение.
Проблема заключалась в том, что я добавил в инициализатор старый код для форматов даты. похоже, что этот код создавал проблему.
содержимое файла: date_format.rb:
Time::DATE_FORMATS[:month_and_year] = "%B %Y"
Time::DATE_FORMATS[:note] = lambda { |time| time.strftime("%a, %b %e at %l:%M") time.strftime("%p").downcase }
Time::DATE_FORMATS[:db] = lambda { |time| time.strftime("%Y-%m-%d")}
Time::DATE_FORMATS[:nice] = lambda { |time| time.strftime("%b %e, %Y")}
Я удалил этот код, и все работало нормально