假设我有两个这样定义的模型,一个带有自定义验证,用于检查其父级(所有者)的某些条件。它可以是父母的任何条件,而不仅仅是我在示例中使用的条件:
class Project < ActiveRecord::Base
has_and_belongs_to_many :phrases
end
class Phrase < ActiveRecord::Base
has_and_belongs_to_many :projects
validate do
if self.projects.size == 0
errors.add(:base, "Must have at least one parent project")
end
end
end
然后,在创建一个新项目后,我想在它下面创建一个新短语:
project = Project.create!(:name => "My Project")
phrase = project.phrases.create!(:value => "My phrase")
运行验证时,连接表中实际上没有创建任何行,并且phrase未保存。验证失败,正如我们预期的那样。
那么问题是:如何访问块Project内的父实例validate?既然我打电话给project.phrases.create!我,我明确地说“创建一个新Phrase的作为这个特定父母的孩子Project”。有什么方法可以访问它吗?ActiveRecord 关联提供了一种方法,但据我所知owner,它在内部不可用。validate
提前致谢!