1

我有一个小问题,我无法解决。我想验证至少有一个关联模型。像下面这样

class User < ActiveRecord::Base
has_many :things
validates_presence_of :things
end

class Thing < ActiveRecord::Base
belongs_to :user
end

当我通过 更新我的模型时,这工作正常#update_attributes,但是当我简单地设置时@user.things = [],我能够在数据库中获取无效数据。我解决这个问题的方法是覆盖 setter 方法

def things=(val)
  begin
    if val.blank?
      errors.add(:things, "not valid")
      raise SomeError
    end
    super
  rescue SomeError
    false
  end
end

但不知何故,这感觉不对。有没有办法通过验证和/或回调来归档相同的结果,最好是#things=返回 false (而不是val),这样@user.things就不会改变(我的意思是缓存的@user.things@user.things(true)无论如何都应该可以正常工作)。

4

1 回答 1

0

您可以创建一个自定义验证器来检查事物的存在。

代替

validates_presence_of :things

你可以做

validate :user_has_things

def user_has_things
 if self.things.size == 0
  errors.add("user has no thingies")
 end
end
于 2013-02-25T16:55:29.230 回答