ActiveRecord Создать (не!) Исключение при проверке - PullRequest
7 голосов
/ 14 июня 2010

Поэтому я использую проверки модели ActiveRecord для проверки формы в приложении RESTful.

У меня есть действие создания, которое:

@association = Association.new

и принимающая сторона формы создает хеш данных из параметров формы для сохранения в базе данных, используя:

@association = user.associations.create(data)

Я хочу просто отобразить действие создания, если проверка не удалась. Проблема заключается в том, что метод .create (not!) Вызывает исключение в тех случаях, когда проверка модели не удалась. Пример:

validates_format_of :url,         :with => /(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix, :message => "Your url doesn't seem valid."

в модели выдает:

ActiveRecord::RecordInvalid Exception: Validation failed: Url Your url doesn't seem valid.

Я думал. Создай! предполагается, что выдается исключение, тогда как .create не является.

Я что-то здесь упускаю?

Ruby 1.8.7, уровень исправления 173 и рельсы 2.3.3

1 Ответ

11 голосов
/ 14 июня 2010

Внимательно прочитайте документацию create и create! .

Оба create и create! проверьтеобратные вызовы (в вашем случае проверки). метод create возвращает false, если исключение вызывается, и true, если нет, метод create! вызывает исключение, если запись недействительна.

Тем не менее, create может выдать ActiveRecord::RecordNotUnique, если у вас есть уникальный индекс в базе данных и не установлен валидация в модели.В этом случае вы должны добавить validates :fieldname, uniqueness: true на модель.

...