【发布时间】:2010-05-25 03:57:51
【问题描述】:
我有一个配方模型,它有_many 成分(又属于_torecipe)。我希望成分依赖于食谱而存在;没有配方就不能存在成分。
我正在尝试强制在成分中存在有效的配方 ID。我一直在使用成分中的 validates :recipe, :presence => true (Rails 3) 语句来执行此操作。如果我在将成分添加到它的 ingredients 集合之前保存配方,这很好用。但是,如果我对保存没有显式控制(例如当我从嵌套表单创建食谱及其成分时),则会收到错误消息:
配料配方不能为空
我可以简单地通过在成分.recipe 上删除存在验证来解决这个问题。但是,我不是特别喜欢这样,因为这意味着我在没有安全网的情况下工作。
在 Rails 中实施存在依赖的最佳方法是什么?
我正在考虑的事情(请评论每个人的智慧):
- 在成分.recipe_id 数据库列上添加非空约束,并让数据库为我进行检查。
- 以某种方式检查成分是否在未保存配方的成分集合中的自定义验证(因此不能有 recipe_id 但仍被视为有效)。
【问题讨论】:
标签: ruby-on-rails ruby validation foreign-keys has-many