首页 > 解决方案 > 如何拒绝空白 before_save 回调轨道?

问题描述

我想用模型回调拒绝空白参数

架构:访谈

+----------------+-------------+------+-----+---------+----------------+
| Field          | Type        | Null | Key | Default | Extra          |
+----------------+-------------+------+-----+---------+----------------+
| id             | bigint(20)  | NO   | PRI | NULL    | auto_increment |
| note           | varchar(50) | YES  |     | NULL    |                |
| interview_at   | datetime    | NO   |     | NULL    |                |
| created_at     | datetime    | NO   |     | NULL    |                |
| updated_at     | datetime    | NO   |     | NULL    |                |
+----------------+-------------+------+-----+---------+----------------+

控制器:

  def interviews
    return [] unless params[:interviews]
    parse_params(:interviews).map do |interview|
      Interview.find_or_initialize_by( interview }) )
    end
  end

模型:

class Interview < ApplicationRecord
  before_save :remove_blank

  def remove_blank
    @new_record = false if interview_at.blank?
  end
end

例子:

输入:

  1. 采访1(interview_at:'2019-09-15 22:00',注:'abc')
  2. 采访 2( interview_at: '', 注意: 'bcd')

输出:

  1. 采访一(采访时间:2019-09-15 22:00,注:'abc')
  2. 采访2(采访时间:2019-09-15 22:00,注:'abc')

before_save 在我创建时返回错误的属性。我该如何解决?

谢谢你的帮助

标签: ruby-on-railsmodelruby-on-rails-5.2

解决方案


你可以试一试,你会想要创建一个验证,这将防止记录被保存,并使模型记录在你调用valid?它时返回 false。

class Interview < ApplicationRecord
  validate :interview_at_not_blank

  def interview_at_not_blank
    errors.add(:interview_at, :blank, message: "cannot be blank") unless interview_at.blank?
  end
end

推荐阅读