Хорошо, у меня есть отношения между людьми, пользователями и сотрудниками, так что все сотрудники являются пользователями, а все пользователи - людьми. Person
является абстрактным классом, из которого User
является производным, а Employee
является производным от него.
Теперь ... У меня есть класс EmployeesController
, а метод create
выглядит следующим образом:
def create
@employee = Employee.new(params[:employee])
@employee.user = User.new(params[:user])
@employee.user.person = Person.new(params[:person])
respond_to do |format|
if @employee.save
flash[:notice] = 'Employee was successfully created.'
format.html { redirect_to(@employee) }
format.xml { render :xml => @employee, :status => :created, :location => @employee }
else
format.html { render :action => "new" }
format.xml { render :xml => @employee.errors, :status => :unprocessable_entity }
end
end
end
Как вы можете видеть, когда я использую предложение :polymorphic => true
, вы получаете доступ к суперклассу, делая что-то вроде @derived_class_variable.super_class_variable.super_super_etc
. У класса Person
есть validates_presence_of :first_name
, и когда он удовлетворен, в моей форме все в порядке. Однако, если я опущу имя, это не помешает сотруднику быть спасенным. Происходит следующее: запись сотрудника сохраняется, а запись сотрудника - нет (из-за проверки).
Как я могу получить ошибки проверки для отображения во флэш-объекте?