22

Ich habe ein seltsames Problem mit einem Schienenmodell, das ich gerade erstellt habe.Warum ersetzt "rails.full_messages" von Rails keine Attribut- und Nachrichtenvariablen?

Hier sind meine Validierungen:

validates_presence_of :from_name, :message => 'Please provide a from name.' 
validates_presence_of :from_email 
validates_presence_of :giftition_plan_id 

ich Probleme mit errors.full_messages sowie f.error_messages in meinem Formular:

g = Giftition.create 
g.errors.first 
=> ["from_name", "Please provide a from name."] 
>> g.errors.full_messages 
=> ["{{attribute}} {{message}}", "{{attribute}} {{message}}", "{{attribute}} {{message}}"] 

ich "{{attribute}} {{message}}" gerade bin immer. Irgendwelche Ideen?

UPDATE: Ich habe Schienen 3 und alle Edelsteine, die damit installiert wurden, deinstalliert, und das Problem verschwand damit. Es ist jedoch keine Lösung ... Ich möchte immer noch Schienen 3 installiert haben.

UPDATE: Klingt wie ein Upgrade auf 2.3.9 behebt das Problem. Leider habe ich für jetzt aufgegeben, aber irgendwann in der Zukunft werde ich das versuchen.

+0

Ich erinnerte mich gerade, dass ich gerade beide Schienen 2.3.9 und 3.0.3 installiert hatte ... Mein googling sagt, dass definitiv etwas hat mach damit ... obwohl ich keine fixe finden kann. – tybro0103

+0

Ruby, Gems und Rails sollten Probleme mit einem Konflikt vermeiden, selbst wenn Sie zwei Versionen installiert haben. Wenn Sie eine Version von Rails entfernen möchten, ist es einfach, obwohl Sie vorsichtig sein möchten, dass Sie die Version entfernen, die Sie nicht verwenden, oder ein Upgrade auf 3.0+, wenn Ihr Projekt 2.3.9 war, dann entfernen Sie es. 'Gem uninstall rails -v 2.3.9' –

+2

i18n 0.5.0 wurde installiert (als Abhängigkeit), als ich das Ahnen-Juwel installierte. Ich habe das Problem, das Sie beschreiben, als ich Rails 2.3.8 ausgeführt habe. Ich konnte dieses Problem beheben, indem ich i18n deinstallierte und es dann neu installierte, aber Version 0.4.0 erzwang. – GilliMonsta

Antwort

8

Upgrade auf Version Schienen 2.3.9 behebt dieses Problem

gem install -v 2.3.9 rails --include-dependencies 

EDIT:

Sie müssen auch die Datei config\environment.rb bearbeiten, um die RAILS_GEM_VERSION zu ändern.

RAILS_GEM_VERSION = '2.3.9' 

EDIT # 2:

sollte ich beachten Sie, dass Version 2.3.9 nicht die neueste Version der 2.3.x Zweig ist, und Sie sollten die die jeweils aktuellste Version aktualisieren.

+1

Gleiches Problem mit Schienen 2.3.5. Ich habe das Update auf 2.3.9 durchgeführt und es funktioniert jetzt wie erwartet. – rchampourlier

2

Ich örtlich örtlich repariert, indem ich i18n-0.5.0 entferne.

Experimentieren mit i18n-0.4.0 Ausbeuten (während die korrekt interpoliert String zurückkehrt):

The {{key}} interpolation syntax in I18n messages is deprecated. Please use %{key} instead. 
/usr/lib/ruby/gems/1.8/gems/i18n-0.4.0/lib/i18n/backend/base.rb:160:in `interpolate_without_deprecated_syntax' 
/usr/lib/ruby/gems/1.8/gems/i18n-0.4.0/lib/i18n/backend/base.rb:155:in `gsub' 
/usr/lib/ruby/gems/1.8/gems/i18n-0.4.0/lib/i18n/backend/base.rb:155:in `interpolate_without_deprecated_syntax' 
/usr/lib/ruby/gems/1.8/gems/i18n-0.4.0/lib/i18n/backend/base.rb:188:in `preserve_encoding' 
/usr/lib/ruby/gems/1.8/gems/i18n-0.4.0/lib/i18n/backend/base.rb:154:in `interpolate_without_deprecated_syntax' 
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/i18n_interpolation_deprecation.rb:21:in `interpolate' 
/usr/lib/ruby/gems/1.8/gems/i18n-0.4.0/lib/i18n/backend/base.rb:48:in `translate' 
/usr/lib/ruby/gems/1.8/gems/i18n-0.4.0/lib/i18n.rb:152:in `translate' 
/usr/lib/ruby/gems/1.8/gems/i18n-0.4.0/lib/i18n/backend/base.rb:119:in `resolve' 
/usr/lib/ruby/gems/1.8/gems/i18n-0.4.0/lib/i18n/backend/base.rb:104:in `default' 
/usr/lib/ruby/gems/1.8/gems/i18n-0.4.0/lib/i18n/backend/base.rb:103:in `each' 
/usr/lib/ruby/gems/1.8/gems/i18n-0.4.0/lib/i18n/backend/base.rb:103:in `default' 
/usr/lib/ruby/gems/1.8/gems/i18n-0.4.0/lib/i18n/backend/base.rb:41:in `translate' 
/usr/lib/ruby/gems/1.8/gems/i18n-0.4.0/lib/i18n.rb:152:in `translate' 
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/validations.rb:78:in `generate_message' 

Ich denke, 0.5.0 schaltet den Schmerz, indem nicht-interpoliert Strings ausgibt.


i18n wird von Active erforderlich, so dass die Art, wie ich um bekam die neueste Version (0.5.0) ist geladen:

in config/preinitializer.rb ('Geheimnis' Lebenszyklus Haken vor, die Lasten Active):

require 'rubygems' 
begin 
    gem 'i18n', "~> 0.4.0" 
rescue LoadError 
    # no biggie, optional anyway 
end 
+0

Ich glaube, das war es, was es auch für mich "repariert" hat, aber "fest" ist in Zitaten zu bemerken. – tybro0103

12

Ich stieß auf dieses Problem auch mit einer alten 2.3.5 Rails App, die ich geerbt habe. Ich hatte die Version 5.0 des i18n gem installiert. Ich habe gesehen, dass es die Syntax% {} benötigt. Dadurch in config/locales/en.yml hat der Trick:


en: 
    activerecord: 
    errors: 
     full_messages: 
     format: "%{attribute} %{message}" 
+0

funktioniert wie ein Charme! – huug

+0

Sehr schön! Aber jetzt bekomme ich immer noch Dinge wie: "{{count}} errors verboten, dass diese {{model}} nicht gespeichert wird" – tybro0103

+0

Das klingt nach einem geerbten Ressourcenproblem. Ich habe das vor ein paar Monaten gesehen, aber ich kann mich leider nicht genau an die Lösung erinnern. Angenommen, Sie haben Ressourcen in der Mischung geerbt, würde ich in diese Richtung schauen. Viel Glück! –

0

Hier ist meine komplette config/locales/en.yml, dass das Attribut, Nachricht löst, zählen und Modell Fragen.Ich habe dies aus der RoR docs hier: http://guides.rubyonrails.org/i18n.html

en: active: Fehler: full_messages: Format: "% {attribute}% {Nachricht}" Vorlage: Header: ein: „1 Fehler verboten dieses% {} Modell von „ andere:‚gespeichert werden% {count} Fehler dieses% {} Modell verboten‘gespeichert werden

1

Go umrissenen dir_of_ruby/lib/Rubin/Edelstein/1.8/Edelstein/active-2.3.x/lib/active_record/locale und bearbeiten die en.yml ... ersetzen Sie die {{variable}} zu% {variable}

für mich gearbeitet ...

PS: vielleicht wäre der Weg für Sie anders sein. Passen Sie für Ihre Bequemlichkeit an.

1

Ich arbeite an einem Rails 2.3.5 Server bei der Arbeit, die nicht i18n Juwel hat. Die seltsame Sache ist, dass, während mein Code lokal arbeitet, ich dieses Problem auf dem Arbeitsserver habe. Und eine andere Anwendung, die ich mit denselben genau eingefrorenen Edelsteinen habe, zeigt dieses Problem auf dem Arbeitsserver nicht an.

ich die Active en.yml Datei wie oben geändert, aber änderte auch die Action en.yml Datei die Fehlermeldung Titel/Header richtig zu machen:

\vendor\rails\activerecord\lib\active_record\locale\en.yml 

    #format: "{{attribute}} {{message}}" 
    format: "%{attribute} %{message}" 

    \vendor\rails\actionpack\lib\action_view\local\en.yml 

     activerecord: 
     errors: 
      template: 
      header: 
       one: "1 error prohibited this %{model} from being saved" 
       other: "%{count} errors prohibited this %{model} from being saved"  

Auch ich habe nicht die Mühe mit ihm, aber wenn Sie Fehlermeldungen, die Zählungen enthalten, sieht es aus wie in der active~~POS=TRUNC en.yml Datei, die Sie benötigen würde die Syntax von einigen der Nachrichten zu ändern (wie):

#too_long: "is too long (maximum is {{count}} characters)" 
too_long: "is too long (maximum is #{count} characters)" 
+0

Benötigt diese Technik die Installation des gesamten Rails-Gems unter "Vendor /" oder kann man nur die angegebenen spezifischen "en.yml" -Dateien hinzufügen, werden sie abgeholt und überschreiben die standardmäßigen Rails-Locale-Einstellungen? – ilasno

1
cd <yourRailsProject> 
gem install i18n -v 0.4.0 -i vendor/ -V 

installieren die i18n Juwel Int o der Hersteller-Ordner (-V für ausführliche Ausgabe, nur um zu sehen, was unter der Haube passiert)

+0

hast du mich wirklich gerettet – Maysam

Verwandte Themen