【发布时间】:2013-02-25 14:58:21
【问题描述】:
我有一个小问题,我无法解决。我想验证至少有一个关联模型。如下所示
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) 应该可以正常工作)。
【问题讨论】:
标签: ruby-on-rails validation callback ruby-on-rails-3.2