2013-04-21 2 views
0

Я использую Chronic в приложении для рельсов, как показано ниже. У меня есть форма, которая имеет отдельные текстовые поля (выпадающие списки jquery) для даты и времени. В моей модели у меня есть виртуальные атрибуты, которые должны записывать комбинированное время данных в БД, используя Chronic для синтаксического анализа. Хроника правильно разбирает даты, но независимо от того, в какое время я помещаю в текстовое поле, он выдает 12:00:00 в качестве времени в поле datetime. Я тестировал типы входов в IRB, и, похоже, он работает нормально, я что-то пропустил?Хроническое неправильное время синтаксического анализа

Модель:

class VisitBlock < ActiveRecord::Base 
    attr_accessible :start_date_text, :time_text 
    attr_writer :start_date_text, :time_text 
    before_save :save_start_date_text 

    def time_text 
    end 

    def start_date_text 
    @start_date_text || visit_date_start.try(:strftime, "%m-%d-%Y") 
    end 

    def save_start_date_text 
    self.visit_date_start = Chronic.parse("#{start_date_text} #{time_text}").in_time_zone if @start_date_text.present? 
    end 

Console Log:

Started POST "/visit_blocks" for ************** at 2013-04-21 19:56:20 +0000                                        
Processing by VisitBlocksController#create as HTML                                              
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"Ns4YyAL9a44RU3T/wOw+DPcigVbBd6eQ5wz1exq3g1M=", "visit_block"=>{"start_date_text"=>"04/22/2013", "time_text"=>"05:15 AM"}, "hou 
r"=>"05", "minute"=>"15", "meridian"=>"AM", "button"=>""}                                            
    Client Load (4.8ms) SELECT "clients".* FROM "clients" WHERE "clients"."last_name" IS NULL LIMIT 1                                 
    (0.1ms) begin transaction                                                   
    SQL (3.2ms) INSERT INTO "visit_blocks" ("visit_date_start") VALUES (?) [["created_at", Sun, 21 Apr 2013 19:56:20 UTC +00:00], ["updated_at", Sun, 21 Apr 2013 19:56:20 UTC +00:00], ["visit_date_start", Mon, 22 Apr 2013 12:00:00 UTC +00:00]]                                        
    (6.7ms) commit transaction 
+0

Какой тип 'visit_date_start'? Синтаксический анализ отлично работает AFAICT, используя параметры, показанные в вашем журнале: 'Chronic.parse (" # {start_date_text} # {time_text} "). In_time_zone => Пн, 22 апр 2013 09:15:00 UTC +00: 00' Вы уверены, что параметры выведены правильно? –

+0

Из schema.rb: t.datetime "visit_date_start". Я не уверен, как проверить, правильно ли выведены параметры. – Shaun

ответ

0

я понял, что не определено "TIME_TEXT" правильно в моей модели. Я узнал, напечатав соответствующую дату/время в консоли.

Печать в файл журнала (пришел ноль)

p time_text 

Исправлено определение TIME_TEXT:

@time_text || visit_date_start.try(:strftime, "%I:%M %P") 
Смежные вопросы