ActiveRecord создают (нет!) Выдача исключения на проверке

Таким образом, я использую проверки допустимости модели ActiveRecord для проверки формы в УСПОКОИТЕЛЬНОМ приложении.

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

@association = Association.new

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

@association = user.associations.create(data)

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

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! предполагается выдают исключение, тогда как .create не.

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

Ruby 1.8.7 уровней установки патча 173 и направляющие 2.3.3

7
задан onyxrev 14 June 2010 в 03:30
поделиться

1 ответ

Прочтите документацию create и create! осторожно.

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

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

11
ответ дан 6 December 2019 в 23:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: