0

Time を使用して、作業中のイベント コントローラー内で開始日と終了日を保持しています。ただし、私のアプリケーションは、ブラウザーと Rspec テストの両方で、テスト環境と開発環境の両方で時間情報を送信することを怠っています。時間が作成されているように見えますが、これに関するすべてのテストで戻ってくるのは、一貫して 2000 年 1 月 1 日午前 12 時です。

誰でも問題の特定を手伝ってもらえますか?

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

失敗:

1) EventsController GET は、終了日/時刻 (オプション フィールド) が指定されている場合、サインイン時に表示されます。複数日のイベントの表示には終了日が表示されます

失敗/エラー: response.should have_selector("span", :class => "end_time_date", 次の出力には、Saturday, 01 January 2000 タグが含まれていると予想されます。

...
[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

デフセルフアップ

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

いやー!どうしたの?!

4

1 に答える 1

0

おそらく、日付フィールドではなく時間フィールドが原因です。

私は変更しようとします:

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

t.datetime :start_time, :null => false
t.datetime :end_time
于 2012-05-10T22:59:53.217 に答える