Rails モデルの 1 つで accept_nested_attributes_for を使用しており、親を作成した後に子を保存したいと考えています。
フォームは完全に機能しますが、検証は失敗しています。簡単にするために、次のことを想像してください。
class Project < ActiveRecord::Base
has_many :tasks
accepts_nested_attributes_for :tasks
end
class Task < ActiveRecord::Base
belongs_to :project
validates_presence_of :project_id
validates_associated :project
end
そして私は走っています:
Project.create!(
:name => 'Something',
:task_attributes => [ { :name => '123' }, { :name => '456' } ]
)
プロジェクト モデルを保存すると、タスクに project_id がないため (プロジェクトが保存されていないため)、検証が失敗します。
Rails は以下のパターンに従っているようです。
- プロジェクトの検証
- 検証タスク
- プロジェクトを保存
- タスクを保存
パターンは次のようになります。
- プロジェクトの検証
- 合格時: プロジェクトを保存して続行...
- 検証タスク
- 合格時: タスクの保存
- 失敗時: プロジェクトを削除します (ロールバックの可能性がありますか?)
したがって、私の質問は次のようになります: 親 (プロジェクト) が保存された後、子 (タスク) で Rails に project_id= (または project=) メソッドと検証を実行させるにはどうすればよいですか? ただし、親 (プロジェクト) モデルは保存しないでください。子 (タスク) が無効な場合は?
何か案は?