如何在ActiveRecord关联中强制执行包含规则

时间:2011-08-18 01:59:57

标签: ruby-on-rails ruby activerecord model validation

我是rails的新手,我对如何最好地对我的模型关联实施自定义规则提出疑问。

例如,假设我有:

class Person < ActiveRecord::Base
  belongs_to :organization
end

class Organization < ActiveRecord::Base
  has_many :people
end

现在假设我只想允许Organization.people << Person.new(...)命令成功,如果新的Person对象与之前添加到people的其他Organization兼容}。这需要在Organization.people的所有现有元素上运行验证检查,并决定是否可以添加新的Person

在我看来,我可以通过覆盖所有Organization.people赋值运算符(例如<<=)并将我的验证逻辑放在覆盖例程中来实现。

这是实现这一目标的最佳方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你可以在Person类中进行验证。它将对self.organiation.people中的其他人进行测试。我不知道是否会覆盖&lt;&lt;只有因为如果你决定创建像Person.new(:organization =&gt; some_org)之类的人你的&lt;&lt;覆盖不会被使用。如果验证存在于Person类中,无论您如何创建此人,它都会进行练习。