验证失败:[属性]不能为空-(但不是!?)

时间:2019-07-07 09:29:38

标签: ruby-on-rails

在我的应用程序中,我具有以下SupportSession模型和验证规则:

class SupportSession < ApplicationRecord
  validates :cancelled, presence: true

但是每当我尝试使用以下数据为数据库播种时:

SupportSession.create!(venue: 'Cafe', mode_of_delivery: 'face-to-face', support_type: 'mentoring', start_time: '2019-05-15 16:12', end_time: '2019-05-15 16:35', total_breaks_mins: 0, duration_mins: 23, rounded_duration_mins: 30, status: 'ready', cancelled: false, support_allocation_id: 6)

我收到此错误:

ActiveRecord::RecordInvalid (Validation failed: Cancelled can't be blank)

我很困惑,因为我的种子数据中显然存在被取消的信息。

这是SupportSession表结构:

  t.string :venue
  t.string :mode_of_delivery
  t.string :support_type
  t.datetime :start_time
  t.datetime :end_time
  t.integer :duration_mins
  t.integer :rounded_duration_mins
  t.integer :total_breaks_mins
  t.string :status
  t.boolean :cancelled
  t.string :reason_for_cancellation
  t.datetime :rearranged_to

有什么想法吗?

我也在我的模型中尝试过:

validates_presence_of

并使用:

cancelled: '0'
cancelled: 0
cancelled: 'false'

但似乎没有任何作用。

1 个答案:

答案 0 :(得分:2)

blank?对于false值返回true。启动Rails时,此方法的行为可能非常棘手。仅列举最常见的情况。

false.blank?     # => true
''.blank?        # => true
'   '.blank?     # => true
"\t\n\r".blank?  # => true
' blah '.blank?  # => false

您可以绕开这个by doing

validates :cancelled, presence: true, allow_blank: true