【问题标题】:Rails 3 - Validation for Time existenceRails 3 - 时间存在验证
【发布时间】:2012-04-29 10:46:10
【问题描述】:

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

#  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

【问题讨论】:

    标签: ruby ruby-on-rails-3 validation rspec ruby-on-rails-3.2


    【解决方案1】:

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

    也许我没有完全理解某些事情,但我认为这不是非常合乎逻辑和可预测的行为。需要查看来源。

    【讨论】:

    • 为什么你认为这不合逻辑?我应该检查用户输入,对吧?
    • 你是对的,当我使用“”而不是“”时,它可以工作。但这对我来说很奇怪,因为presence helper 检查空字符串或带空格的字符串。此外,我之前从未在 Rails 中工作过,所以我只是在尝试。
    • 没错,我说的是rails奇怪的行为。我认为从空白字符串中生成有效的 Time 对象是不正确的。
    • 空有区别?和空白? ' '.empty? 返回 false,但 ' '.blank? 返回 true。可能是这个原因?
    • 它可以以某种方式连接,但我们需要确定来源。 Issue on github 已创建
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多