我有一个小问题,我无法解决。我想验证至少有一个关联的模型。如下所示
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)
无论如何都应该正常工作。)
答案 0 :(得分: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