2016-11-27 1 views
0

Je travaille sur une grande application web qui utilise "type" comme une colonne dans la base de données pour la plupart des tables. Je comprends que le mot "type" est un mot clé dans Ruby, et ne devrait pas être utilisé comme des colonnes. Cependant, pourquoi est-ce que je peux toujours exécuter l'application Web sur mon serveur local et qu'il n'y a aucun problème apparent dans l'environnement de production? L'utilisation de "type" en tant que colonne pourrait-elle causer des problèmes dans le futur?"Type" utilisé comme mot clé soulevant une exception dans RSpec mais pas dans les environnements de production ou de développement

Ce comportement est encore plus confus car il provoque l'échec de mes tests de fonctionnalité RSpec lors de la création d'une vidéo (l'une des ressources), puis sa redirection vers la vue d'affichage. (Notez que la vidéo comme des attributs qui ont des associations avec plusieurs des tables qui ont "type" comme une colonne).

Tel est le message d'erreur qui est soulevée:

"The single-table inheritance mechanism failed to locate the subclass: 'reference'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite Tag.inheritance_column to use another column for that information."

(Tiré du code HTML généré et affiché par print page.body)

Pourquoi cette exception soulevée dans mes spécifications d'essai, mais pas les environnements de développement ou de production? (Je suis en charge de mettre ensemble les spécifications de test, de sorte que vous avez dans votre appareil sur les moyens de contourner cette erreur, ce serait utile aussi!)

Remarques sur ma configuration:

  • I » m en utilisant Ruby 2.1.2 et 4.1.1 rails
  • aide capybara, fille d'usine, et capybara-WebKit comme pilote web

Répondre

0

comme il se trouve, il y avait une colonne de type explicite dans le schéma, mais il a été tiré de la sous-classe de la ressource. La raison pour laquelle RSpec a eu un problème est que j'essayais de définir la colonne type sans en faire une sous-classe. La solution consistait à utiliser une notation sous-classée lors de la saisie de données dans le type. Dans mon cas, cela signifie que la chaîne dans la colonne type doit être placée comme suit: "Tags::Reference" plutôt que "reference".