2010-12-07 22 views
4

Rails affiche les messages de validation sur la page en tant que tels:1 erreur interdit ce modèle {{}} d'être sauvé

1 error prohibited this {{model}} from being saved 
There were problems with the following fields: 
{{attribute}} {{message}} 

Voulant à montrer les noms de modèle pas ces ces supports. Comment résoudre ce problème et pourquoi?

+0

Quelle version de Rails? Quelle version de Ruby? Quel système d'exploitation? À quoi ressemble votre code? Quoi d'autre est dans vos journaux? À quoi ressemble votre Gemfile? etc. – jdl

Répondre

10

Ceci est un problème avec l'internationalisation dans les rails. Une solution qui a fonctionné pour certains est de déclasser le joyau de l'internationalisation de 0.5.0 à 0.4.2, comme suit:

sudo gem uninstall i18n 
sudo gem install i18n -v 0.4.2 

Bien sûr, si vous utilisez RVM pour gérer vos pierres précieuses, vous ne besoin sudo dans les commandes ci-dessus.

+0

Quelqu'un at-il un lien vers le rapport de bogue qui génère cette erreur? Je voulais juste garder un œil sur quand cela pourrait être réparé. Cheers – Evolve

+0

Ce n'est pas un bogue en soi :-(- c'est à cause de la mentalité habituelle de "casser les précédentes API" avec Rails Rails 3 essaie de se déplacer vers Ruby 1.9 et Ruby 1.9 inclut une syntaxe "% {}" pour les substitutions de chaînes Dans la gemme i18n, les versions antérieures à la version 0.5.0 prennent en charge les deux versions: à partir de la version 0.5.0, seul le nouveau format est pris en charge, ce qui signifie que vous pouvez accidentellement briser vos Rails 2.3. 5 installation en installant Rails 3, car il tire en i18n 0.5.0. –

+0

En plus de ce qui précède - à propos de Rails 2.3.8, Rails lui-même a commencé à utiliser la nouvelle syntaxe d'interpolation, de sorte qu'il fonctionne bien avec la nouvelle gemme i18n. Mais bien sûr, la plupart des gens ne font rien après Rails 2.3.5, parce qu'ils ont tous des failles critiques en raison de leur dépendance à une version Rack cassée (entre autres). Voir le blog Ruby On Rails et les commentaires des utilisateurs sur e.g. l'annonce de la version 2.3.9 pour plus de détails. Jusqu'à ce que Rails 2.3.x fonctionne à nouveau correctement, tout cela est horrible. –

1

si vous voulez laisser les deux pierres précieuses installées, une autre solution est de créer config/preinitializers.rb et ajoutez la ligne

gem 'i18n', '0.4.2' 
+1

le seul Gotcha à considérer est que si vous utilisez passager fraie à puce (vos applications partagées une instance de rails) le preinitializer est ignoré de sorte que vous devrez changer une ligne dans activesupport 2.3.5 activesupport-2.3.5/lib/activesupport/vendor.rb de: petit bijou 'i18n', '> = 0.1.3' à: bijou 'i18n', '> = 0.1.3', '<0.5.0' Tout ce que vous faites est révélateur actif soutenir que les pauses de compatibilité à partir de la série 0.5.0 –

0

Tout en utilisant Rails 2.3.5, même avec config/preinitializers.rb contenant

gem 'i18n', '0.4.2

et environment.rb contenant

config.gem "i18n", :version => '0.4.2'

J'ai dû désinstaller la version 0.5.0 de la gemme i18n pour que cela fonctionne.

2

La bonne solution consiste à utiliser bundler pour gérer vos gems au lieu d'utiliser les valeurs par défaut du système et l'ancienne méthode Rails 2.x pour l'intégrer dans environment.rb. Bundler sépare correctement les gemmes d'application de vos gemmes système et supprime les problèmes qui surviennent lors de l'utilisation des versions 0.4.2 et 0.5 d'i18n avec Rails 2.x et 3.x.

Étapes:

  1. Configuration Bundler pour vos Rails 2.3 app
  2. Dans votre Gemfile, il suffit de laisser complètement i18t.
  3. Run 'bundle'

Note: Si vous avez besoin i18n, suffit de spécifier la version correcte dans le Gemfile. Bundler sépare correctement les gemmes de votre application de vos gemmes système afin qu'il n'y aura jamais les comportements étranges d'avoir à la fois 0.4.2 et 0.5 installé sur votre système.