Мне сложно понять, как получить Rails, чтобы показать явное сообщение об ошибке для дочернего ресурса, который отказывает в проверке при визуализации XML-шаблона. Гипотетически, у меня есть следующие классы:
class School < ActiveRecord::Base
has_many :students
validates_associated :students
def self.add_student(bad_email)
s = Student.new(bad_email)
students << s
end
end
class Student < ActiveRecord::Base
belongs_to :school
validates_format_of :email,
:with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i,
:message => "You must supply a valid email"
end
Теперь, в контроллере, скажем, мы хотим создать тривиальный API, чтобы мы могли добавить новую школу со студентом в нее (опять же, я сказал, это ужасный пример, но играет свою роль с целью вопрос)
class SchoolsController < ApplicationController
def create
@school = School.new
@school.add_student(params[:bad_email])
respond_to do |format|
if @school.save
# some code
else
format.xml { render :xml => @school.errors, :status => :unprocessable_entity }
end
end
end
end
Теперь проверка работает очень хорошо, все умирает, потому что письмо не соответствует регулярному выражению, установленному в методе validates_format_of в классе Student. Однако вывод, который я получаю, следующий:
<?xml version="1.0" encoding="UTF-8"?>
<errors>
<error>Students is invalid</error>
</errors>
Я хочу, чтобы появилось более содержательное сообщение об ошибке, которое я установил выше, с помощью validates_format_of. Смысл, я хочу сказать:
<error>You must supply a valid email</error>
Что я делаю неправильно, чтобы это не появилось?