2010-05-24 3 views
3

Je reçois cette exception lorsque vous faites une forme de modèle imbriqué:AssociationTypeMismatch avec Type attendu sur Nested Formulaires types

ActiveRecord::AssociationTypeMismatch in RecipesController#update 
    Ingredient(#35624480) expected, got Ingredient(#34767560) 

Les modèles concernés sont la recette et des ingrédients. Recette has_many et accepte_nested_attributes_for: ingrédients, qui appartient à: recette.

Je reçois cette exception lors de la tentative de _destroy (= 1) l'un des ingrédients préexistants dans un formulaire d'ingrédient imbriqué pour l'édition/la mise à jour de recettes.

Cela n'a pas beaucoup de sens, principalement parce que les types d'association sont comme prévu (par l'aveu même de l'exception). Ce qui est encore moins logique, c'est works just fine in a functional test.

Aussi, cela fonctionne parfois si je re-poster le formulaire (via un navigateur actualisé sur Update). Cela fonctionnera également si je redémarre le serveur web (développement).

Des idées sur ce qui pourrait être à l'origine de ce problème ou sur ce que je devrais rechercher?

+0

Avez-vous comparé les entrées du journal pour les premiers (à défaut) et deuxième (mises à jour) avec succès? – zetetic

+0

Non, mais c'est une bonne idée. Merci. –

+0

Les journaux étaient identiques jusqu'à la suppression; le journal en échec a l'exception, celui qui a réussi a le delete SQL. –

Répondre

6

Cela signifie généralement que "les rails ne se rechargent pas correctement une fois" dans votre environnement/fichiers xxx vous pouvez le changer pour ne pas recharger, ou le laisser recharger.

+0

Bonjour @rogerdpack; faites-vous référence à la propriété config.cache_classes? –

+0

Il ressemble vraiment à un problème de chargement de classe; J'ai changé config.cache_classes à true en développement et le problème a disparu. –

+0

On dirait que vous l'avez réparé. Pour moi, cela signifiait que mes plugins ne rechargeaient pas correctement ou bizarrement ... – rogerdpack

-1

Cela peut parfois être corrigé en ajoutant correcte besoin de, commencer là où la classe est utilisé dans votre code

Questions connexes