J'ai mise en œuvre STI comme suit:Comment remplacer le attr_protected?
class Automobile < ActiveRecord::Base
end
class Car < Automobile
end
class Truck < Automobile
end
class User < ActiveRecord::Base
has_many :automobiles
accepts_nested_attributes_for :automobiles
end
Je crée une liste d'automobiles pour un utilisateur. Pour chaque automobile, l'interface utilisateur définit le champ type
et les propriétés associées à l'automobile. Pendant la soumission du formulaire, le champ type
est ignoré car il s'agit d'un attribut protégé.
Comment puis-je contourner ce problème? Existe-t-il un moyen déclaratif d'attribuer un attribut protégé à unprotect
?
Edit: Ceci est ma solution actuelle pour le problème: je remplacer la méthode privée attributes_protected_by_default
dans ma classe de modèle.
class Automobile < ActiveRecord::Base
private
def attributes_protected_by_default
super - [self.class.inheritance_column]
end
end
Cela supprime le champ type
de la liste protégée.
J'espère qu'il y a un meilleur moyen que cela.
J'ai essayé ceci mais apparemment Automobile.new (params [: automobile]) ne fonctionne pas dans mon action controller-create. –