Таким образом, я использую проверки допустимости модели 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
Прочтите документацию create и create! осторожно.
Оба создают и создают! проверьте обратные вызовы (в вашем случае проверки). create метод возвращает false, если возникает исключение, и true, если нет, пока, создать! метод вызвал исключение, если запись недействительна.
Однако create может выдать ActiveRecord :: RecordNotUnique
, если у вас есть уникальный индекс в базе данных и для модели не установлена проверка. В этом случае вы должны добавить в модель validates: fieldname, uniqueness: true
.