我有一个小问题,我无法解决。我想验证至少有一个关联模型。像下面这样
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)
无论如何都应该可以正常工作)。