Rails 3 – validation时间存在

我有一个带有Time属性的模型。 我想检查时间不能为空(更好的选择可能是检查输入是时间,但我不知道如何处理)。 我试过这个validation:

# id :integer not null, primary key # school_class_id :integer # meeting_time :time class Meeting  { :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 

在您的示例中,您将" "分配给meeting_time ,而不是nil"" 。 但是Time对象可以通过非空,甚至空白字符串成功生成。 将meeting_time设置为""nil应解决您的问题。

也许我不完全理解某些东西,但我认为这不是非常合乎逻辑且可预测的行为。 需要看看来源。