如何将其他条件写在rails before_create挂钩中,以便仅在条件为true时保存对象?

时间:2019-05-28 10:51:10

标签: ruby-on-rails

我只想在对象的特定字段合法时才将对象保存在db中。同样,我在Rails应用程序的模型类中创建了一个before_create钩子。如何添加条件保存?

如果不保存对象,我试图返回false。但是,它不起作用,并且该对象仍在保存/

1 个答案:

答案 0 :(得分:0)

添加自定义验证

对于具有字符串列foo的Test类,其值必须为“ bar”或“ baz”:

class Test < ApplicationRecord

  validate :foo_check

  def foo_check
    if ['bar', 'baz'].exclude? foo
      errors.add(:foo, "has to be either 'bar' or 'baz'")
    end
  end

请注意,对于这种特定情况,已经有一种更简单的方法可以做到这一点,即:
validates :foo, inclusion: { in: %w(bar baz)
(请注意,%w(bar baz)['bar', 'baz']等效)
我只做了自定义验证,以表明您可以创建一个可以检查基本上所有内容的验证。

以下是自定义验证的指南: https://guides.rubyonrails.org/active_record_validations.html#custom-methods