このように定義された 2 つのモデルがあるとしましょう。一方のモデルには、親 (所有者) の条件をチェックするカスタム検証があります。例で使用しているものだけでなく、親の任意の条件である可能性があります。
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!
新しいを作成する」と明示的に言っています。アクセスする方法はありますか?ActiveRecord アソシエーションはメソッドを提供しますが、私が知る限り内部では利用できません。Phrase
Project
owner
validate
前もって感謝します!