私は、has_many Ingredients(次にbelongs_to Recipe)を持つレシピモデルを持っています。レシピに応じて材料が存在するようにしたい。材料はレシピなしでは決して存在してはなりません。
材料に有効なレシピIDの存在を強制しようとしています。私はこれをvalidates :recipe, :presence => true
Ingredientの(Rails 3)ステートメントで行ってきました。コレクションに材料を追加する前にレシピを保存すると、これは正常に機能しingredients
ます。ただし、保存を明示的に制御できない場合(ネストされたフォームからレシピとその材料を作成する場合など)、エラーが発生します。
材料のレシピを空白にすることはできません
Ingredient.recipeにプレゼンス検証をドロップするだけで、これを回避できます。ただし、セーフティネットなしで作業しているので、特に好きではありません。
Railsで存在依存を強制するための最良の方法は何ですか?
私が考えていること(それぞれの知恵についてコメントしてください):
- components.recipe_idデータベース列にnull以外の制約を追加し、データベースにチェックを任せます。
- 材料が未保存のレシピの材料コレクションにあるかどうかを何らかの方法でチェックするカスタム検証(したがって、recipe_idを持つことはできませんが、それでも有効と見なされます)。