1

時間属性を持つモデルがあります。時間が空にならないことを確認したいです(おそらく、入力が時間であることを確認することをお勧めしますが、それを処理する方法がわかりません)。私はこの検証を試みました:

#  id              :integer         not null, primary key
#  school_class_id :integer
#  meeting_time    :time
class Meeting < ActiveRecord::Base                                                    
  validates :meeting_time,
              :presence => { :message => "can't be empty!" }                                                            
end

次に、仕様でこれを確認しようとしましたが、これは失敗します (空の時間は問題ありませんが、そうすべきではありません)。私は何を間違っていますか?

Rspec:

#  id              :integer         not null, primary key
#  school_class_id :integer
#  meeting_time    :time

require 'spec_helper'

describe Meeting do
  before(:each) do
    @class = FactoryGirl.create( :school_class )
    @attr_meeting = {
      :meeting_theme => 'Text is here',
      :meeting_date => "#{Date.today}",
      :meeting_time => "#{Time.now}",
      :meeting_room => '1234'
    }
  end

  describe "Validations" do
    describe "Rejection" do
      it "should reject blank time" do
        wrong_attr = @attr_meeting.merge( :meeting_time => "  " )
        @class.meetings.build( wrong_attr ).should_not be_valid
      end
    end
  end
end

エラー:

 Meeting Validations Rejection should reject blank time
     Failure/Error: @class.meetings.build( wrong_attr ).should_not be_valid
       expected valid? to return false, got true
4

1 に答える 1

1

あなたの例で" "meeting_timenilまたはに割り当てます""。しかし、Timeオブジェクトは、空でない、空白の文字列からでも正常に生成される可能性があります。設定meeting_timeする""か、nil問題を解決する必要があります。

何かを完全には理解していないかもしれませんが、それはあまり論理的で予測可能な動作ではないと思います。ソースを調べる必要があります。

于 2012-04-29T11:08:18.067 に答える