Nous avons un véhicule modèle parent qui est hérité pour faire des classes voiture, camion, SUV. Dans notre formulaire, nous permettons à l'utilisateur de modifier les données pour un groupe de véhicules, et l'un des attributs de chaque véhicule est un menu de sélection pour "type". L'attribut HTML est nommé VEHICLE_TYPE et met à jour l'attribut de type polymorphes réelle dans le modèle du véhicule:Rails changeant type polymorphique d'un objet
# Get/Set Type bc rails doesnt allow :type to be set in mass
def vehicle_type
self.type
end
def vehicle_type=(type)
self.type = type
end
Le problème que nous avons est que lorsque nous appelons update_attributes sur les données de formulaire et le type d'un véhicule existant a été modifié , rails appelle la validation de l'ancienne classe (pas un nouveau type) qui entraîne des erreurs. Ce que nous devons faire, c'est quand vehicle_type est changé, que le modèle est également changé en ce nouveau type.
Existe-t-il un moyen de le faire?
Voici l'action de mise à jour (flotte de véhicules has_many):
# PUT /fleet/1
# PUT /fleet/1.xml
def update
@fleet = Fleet.find(params[:id])
respond_to do |format|
if @fleet.update_attributes(params[:fleet])
flash[:notice] = 'Fleet of vehicles was successfully updated.'
format.html { render :action => "edit" }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @fleet.errors, :status => :unprocessable_entity }
end
end
end
Voici la flotte:
class Fleet < ActiveRecord::Base
has_many :vehicles, :dependent => :destroy, :order => 'position ASC'
accepts_nested_attributes_for :vehicles,
:reject_if => proc { |attrs| attrs['name'].blank? },
:allow_destroy => true
Les modèles utilisent-ils un héritage de table unique? Pourriez-vous publier l'action de mise à jour pour les contrôleurs en question? – EmFi
Hey EmFi, oui, ils utilisent l'héritage Table unique. Question mise à jour ci-dessus avec le code pour la mise à jour. – LMH