Rails сложная форма проверки? - PullRequest
0 голосов
/ 05 октября 2009

У меня есть сложная форма для моей рабочей модели. Он принимает вложенные атрибуты для кредитов, изображений и видео. (это модифицированная версия примера сложной формы Элой Дюран)

  • Я хочу подтвердить наличие хотя бы одного кредита
  • Я хочу проверить наличие хотя бы одного изображения или одного видео

Когда я делаю (в work.rb):

validates_presence_of :credits 

проверяется правильно, когда я пытаюсь отправить форму без кредитов, но не проверяет, удаляю ли я последний кредит (отметив флажок, который добавляет "_delete" к атрибутам кредита) Он представляет работу, удаляя один-единственный кредит, оставляя работу без каких-либо кредитов.

Есть ли у вас какие-либо идеи о том, как я могу проверить их правильно?

Ответы [ 2 ]

2 голосов
/ 06 октября 2009

Что вам нужно, это что-то вроде:

validate :credits_present

private

  def credits_present
    unless credits.any?{|c| !c.marked_for_destruction? }
      errors.add_to_base "You must provide at least one credit"
    end
  end

Условие в credits_present может быть немного грязным, поэтому позвольте мне разбить его на случай, если вы не будете следовать. Метод any? возвращает true, если какой-либо из элементов в Enumerable отвечает true на указанный блок. В этом случае мы проверяем, что элемент не будет удален. Итак, если какой-либо из кредитов не будет удален, мы получим true. Если true, мы в хорошей форме, у нас есть хотя бы один кредит, который не будет удален. Если, с другой стороны, мы получим false, мы либо узнаем, что кредиты отсутствуют, либо имеющиеся, будут удалены. В этом случае проверка не пройдена, и мы добавляем ошибку.

0 голосов
/ 05 октября 2009

Попробуйте использовать before_save в work.rb


 before_save :check_credits

private
 def check_credits
   self.credits > 0
 end

Если количество кредитов <= ноль, сохранение не будет выполнено. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...