Rails 3.2防止使用错误保存对象

Sch*_*ems 5 ruby ruby-on-rails ruby-on-rails-3

我有一个ActiveRecord对象,我想阻止它被保存,而不需要对模型进行永久性验证.你曾经能够做这样的事情,errors.add但它看起来不再适用了.

user = User.last
user.errors.add :name, "name doesn't rhyme with orange"
user.valid? # => true
user.save   # => true
Run Code Online (Sandbox Code Playgroud)

要么

user = User.last
user.errors.add :base, "my unique error"
user.valid? # => true
user.save   # => true
Run Code Online (Sandbox Code Playgroud)

如何在不修改模型的情况下阻止用户对象保存在Rails 3.2中?

zet*_*tic 7

您可以设置errors,但在验证方法中执行,例如:

validate :must_rhyme_with_orange

def must_rhyme_with_orange
  unless rhymes_with_orange?
    errors.add(:name, "doesn't rhyme with orange")
  end
end
Run Code Online (Sandbox Code Playgroud)

如果你想有条件地运行验证,一个技巧是使用attr_accessor和一个保护条件:

attr_accessor :needs_rhyming

validate :must_rhyme_with_orange, :if => Proc.new {|o| o.needs_rhyming}

> u = User.last
> u.needs_rhyming = true
> u.valid? # false
Run Code Online (Sandbox Code Playgroud)