У меня есть модель рецепта, которая имеет ингредиенты has_many (которые, в свою очередь, принадлежат рецепту). Я хочу, чтобы ингредиент существовал в зависимости от рецепта; Ингредиент никогда не должен существовать без рецепта.
Я пытаюсь обеспечить наличие действительного идентификатора рецепта в ингредиенте. Я делал это с помощью оператора validates :recipe, :presence => true
(Rails 3) в Ingredient. Это прекрасно работает, если я сохраню Рецепт перед добавлением ингредиента в его коллекцию ingredients
. Однако, если у меня нет явного контроля над сохранением (например, когда я создаю рецепт и его ингредиенты из вложенной формы), я получаю сообщение об ошибке:
Рецепт ингредиентов не может быть пустым
Я могу обойти это, просто сбросив проверку присутствия на Ingredient.recipe. Однако мне это не особо нравится, так как это означает, что я работаю без сети безопасности.
Каков наилучший способ обеспечения зависимости от существования в Rails?
Вещи, которые я рассматриваю (пожалуйста, прокомментируйте мудрость каждого):
- Добавление ненулевого ограничения для столбца базы данных ингридиентов.Reipe_id, и позволить базе данных выполнить проверку для меня.
- Пользовательская проверка, которая каким-то образом проверяет, находится ли ингредиент в коллекции ингредиентов несохраненного рецепта (и, следовательно, не может иметь recipe_id, но все еще считается действительным).