Rails应用程序中的时间字段全部填入2000年1月1日上午12:00

时间:2012-05-10 22:30:33

标签: ruby-on-rails ruby-on-rails-3 ruby-1.8.7

我正在使用Time来保存我正在处理的事件控制器中的开始和结束日期。但是,我的应用程序忽略了在测试和开发环境中提交时间信息,无论是在浏览器还是在我的Rspec测试中。时间似乎已经开始了,但是在我所有的测试中回归的是2000年1月1日上午12:00。

任何人都可以帮助找出问题吗?

以下测试由于其他原因而失败(请不要担心这一点),但它显示了问题的严重程度。测试中提交的end_time不是2000年1月1日12:00 AM。

  

故障:

     

1)如果结束日期/时间,则会在登录时显示事件控制器GET   (可选字段)已提供显示多天   事件显示结束日期

     

失败/错误:response.should have_selector(“span”,:class =>“end_time_date”,          预计输出结果将包含2000年1月1日星期六的标签:

...
[div class="start"] 
    Starts:
    Saturday, 01 January 2000 at 12:00 AM
[/div]
[div class="end"]
    Ends
    [span class="end_time_time"]
        12:00 AM
    [/span]
[/div]

以上失败的测试:

  describe "display for a multi-day event" do

      before(:each) do
        # Turn example event into one that spans multiple days.
        @event.end_time.advance(:days => 2)
      end  

      it "shows an end date" do
         get :show, :id => @event
         @human_friendly_end_date = @event.end_time.strftime("%A, %d %B %Y")            
         response.should have_selector("span", :class => "end_time_date", 
                        :content => @human_friendly_end_date)
      end

      it "shows an end time" do
         get :show, :id => @event
         @human_friendly_end_time = @event.end_time.strftime("%I:%M %p")
         response.should have_selector("span", :class => "end_time_time", 
                     :content => @human_friendly_end_time)
      end
  end

您可以在其中看到start_time和end_time属性的模型非常易于访问,并且(此时为start_date)需要:

class Event < ActiveRecord::Base

  belongs_to :user

    attr_accessible :name, :description, :start_time, :end_time, 
                        :max_attendees, :min_attendees, :event_type_id  

  validates :name, :presence => true, :length => { :minimum => 4, :maximum => 140 }

  validates :description, :length => { :minimum => 4, :maximum => 1000 }

  validates :start_time, :presence => true

  #validates :end_time, :presence => true

    validates :user_id, :presence => true

end

FactoryGirl事件生成似乎无关紧要,因为浏览器中出现了同样的问题,但我也会在这里包含它以防万一。你可以看到(从这里注释掉的位)我已经尝试过硬编码来创建日期/时间;这并没有解决任何问题。

Factory.define :event do |event|
  event.name                    "Foo bar"
    event.description             "Yada yada"
    event.association             :user
  week_num = (rand(10) +1)
  day_num = (1+rand(30))
  hour_num = (1+rand(12))
  hours_duration_num = (1+rand(4))
  future_date = week_num.weeks.from_now
  #event.start_time             "2012,8,5,6"
  #event.end_time               "2012,8,5,7"
  event.start_time              "#{future_date.year},#{future_date.month},#{day_num},#{hour_num}"
  event.end_time                "#{future_date.year},#{future_date.month},#{day_num},#{hour_num+hours_duration_num}"
end

我的迁移:

  

class CreateEvents&lt; ActiveRecord :: Migration

     

def self.up

create_table :events do |t|

  #foreign key first  

  t.references :event_type

  t.integer :user_id
  t.string :name, :null => false
  t.text :description, :null => false
  t.time :start_time, :null => false
  t.time "end_time"
  t.timestamps
end

Naaaargh!有什么用?!

1 个答案:

答案 0 :(得分:0)

可能是由于时间字段而不是日期字段。

我会尝试改变:

t.time :start_time, :null => false
t.time "end_time"

t.datetime :start_time, :null => false
t.datetime :end_time