2012-05-10 14 views
0

が入力されました。私が作業しているイベントコントローラ内で開始時刻と終了日を保持する時間を使用しています。しかし、私のアプリケーションは、ブラウザと私のRspecテストの両方で、テスト環境と開発環境の両方でTime情報を提出することを怠っています。時間が作成されているようですが、これに関する私のテストで何が戻ってくるのかは、一貫して2000年1月1日午前12時です。Railsアプリのタイムフィールドに、2000年1月1日の午前12時00分

誰でも問題の特定に役立つことができますか?

次のテストは別の理由で失敗しています(このビットは心配しないでください)が、問題の程度を示しています。テストで提出されたend_timeは2000年1月1日12:00 AMではありませんでした。

Failures:

1) EventsController GET show when signed in if an end date/time (optional fields) have been supplied display for a multi-day event shows an end date

Failure/Error: response.should have_selector("span", :class => "end_time_date", expected following output to contain a Saturday, 01 January 2000 tag:

... 
[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 < 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!何が起こっているの?

+0

に、ユーザは、開始/終了時刻を設定することができますフォームは次のように何を見ていますか? –

+0

私はまだコントローラのその部分については何もしていません。 rspecテストを介して設定するだけで、showアクションを取得することをテストします。 – Reb

+0

あなたのフィクスチャでこれらの時間を設定する方法は奇妙です - "2012,8,5,6"は有効な日付形式ではありません - 私はあなたが明らかに真夜中であるデフォルトのTime値を取得していると思います –

答えて

0

おそらく、日付フィールドではなく時間フィールドのためです。

私は変更しようとするだろう:

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

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

私はすでにそれを試してみました。無駄です。 (別の質問では、これが問題だった場合、日付が無視されたとしても、 "12:00 AM"のデフォルトではなく、時間情報が少なくとも保存されることになります)。まだ助けになりませんでした。 :( – Reb