假设我有两个这样定义的模型,一个带有自定义验证,用于检查其父级(所有者)的某些条件。它可以是父母的任何条件,而不仅仅是我在示例中使用的条件:
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
提前致谢!