Проверки для отношения has_many / own_to - PullRequest
1 голос
/ 25 мая 2010

У меня есть модель рецепта, которая имеет ингредиенты has_many (которые, в свою очередь, принадлежат рецепту). Я хочу, чтобы ингредиент существовал в зависимости от рецепта; Ингредиент никогда не должен существовать без рецепта.

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

Рецепт ингредиентов не может быть пустым

Я могу обойти это, просто сбросив проверку присутствия на Ingredient.recipe. Однако мне это не особо нравится, так как это означает, что я работаю без сети безопасности.

Каков наилучший способ обеспечения зависимости от существования в Rails?

Вещи, которые я рассматриваю (пожалуйста, прокомментируйте мудрость каждого):

  • Добавление ненулевого ограничения для столбца базы данных ингридиентов.Reipe_id, и позволить базе данных выполнить проверку для меня.
  • Пользовательская проверка, которая каким-то образом проверяет, находится ли ингредиент в коллекции ингредиентов несохраненного рецепта (и, следовательно, не может иметь recipe_id, но все еще считается действительным).

1 Ответ

2 голосов
/ 25 мая 2010

Взгляните на это:

https://rails.lighthouseapp.com/projects/8994/tickets/2815-nested-models-build-should-directly-assign-the-parent

Раньше я думал, что я добавил опцию: on =>: update в валидатор, что немного затягивает сеть. Я думаю, что ограничение внешнего ключа в БД - хорошая идея, хотя я использую его редко: (

...