2010-03-22 8 views
0

Ok, j'ai une relation entre les gens, les utilisateurs et les employés de sorte que tous les employés sont des utilisateurs et tous les utilisateurs sont des personnes. Person est une classe abstraite dont User est dérivé et Employee est dérivé de cela.La validation ne pas bouillonner jusqu'à mes autres modèles

maintenant ... J'ai une classe EmployeesController et la méthode create ressemble à ceci:

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 

Comme vous pouvez le voir, lorsque j'utilise la clause :polymorphic => true, la façon dont vous accéder à la super classe est en faisant quelque chose comme @derived_class_variable.super_class_variable.super_super_etc. La classe Person a un validates_presence_of :first_name et quand il est satisfait, sur mon formulaire, tout est OK. Cependant, si je laisse le prénom, cela n'empêchera pas l'employé d'être sauvé. Ce qui se passe, c'est que l'enregistrement de l'employé est sauvegardé mais pas l'enregistrement de la personne (à cause de la validation).

Comment puis-je faire apparaître les erreurs de validation dans l'objet flash?

+0

Est-ce vraiment le polymorphisme de manière se fait en Ruby? Parce que dans toutes les autres langues que je connais, les cteurs de classe transmettent eux-mêmes le sous-ensemble des paramètres aux sous-classes au moment de la création. –

Répondre

0

Ce que je avais besoin était validates_associated donc j'aurais:

employee.rb

validates_associated :user 

user.rb

validates_associated :person 
Questions connexes