Мне трудно понять, как заставить 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>
Что я делаю не так, чтобы это не появилось?