22

Bir rails modeliyle garip bir sorunla karşılaştım. Benim formda errors.full_messages yanı sıra f.error_messages kullanılarakNeden Rails'in "errors.full_messages" özelliği öznitelik ve mesaj değişkenlerini değiştirmiyor?

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

yaşıyorum konular: Sadece "{{attribute}} {{message}}" alıyorum

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

İşte

benim doğrulamaları vardır. Herhangi bir fikir?

GÜNCELLEME: Rayları 3 ve onunla yüklenen tüm taşları kaldırdım ve bu sorun giderildi. Bu bir çözüm değil ... Yine de yüklü 3 rayları olmasını isterdim.

GÜNCELLEME: 2.3.9'a yükseltmek gibi bir sorun, sorunu düzeltir. Ne yazık ki şimdilik vazgeçtim ama gelecekte bunu deneyeceğim.

+0

Az önce 2.3.9 ve 3.0.3 raylarının her ikisini de taktığımı hatırlıyorum. Bununla bir çözüm bulmama rağmen. – tybro0103

+0

Ruby, Gems ve Rails, iki sürümü yüklü olsa bile çakışma sorunlarından kaçınmalıdır. Rails'in bir sürümünü kaldırmak istiyorsanız, kullanmıyor olduğunuz sürümü kaldırdığınızdan emin olmak istiyorsanız veya projeniz 2.3.9 ise, 3.0+ sürümüne yükseltmek istiyorsanız, bu işlemi kolaylaştırın. gem kaldırma rayları -v 2.3.9 ' –

+2

i18n 0.5.0 yüklendi (bağımlılık olarak) aestest gem taşırken. Rails 2.3.8'i çalıştırdığım için anlattığınız konuyla son buldum. Bu sorunu i18n'yi kaldırarak ve daha sonra yeniden yükleyerek ancak 0.4.0 sürümünü zorlayarak düzeltebiliyordum. – GilliMonsta

cevap

8

Yükseltme 2.3.9 düzeltmeleri bu sorunu

gem install -v 2.3.9 rails --include-dependencies 
raylarEDIT:

Ayrıca RAILS_GEM_VERSION'u değiştirmek için config\environment.rb dosyasını düzenlemeniz gerekir.

RAILS_GEM_VERSION = '2.3.9' 

DÜZENLEME # 2:

O sürüm 2.3.9 2.3.x şubesinin son sürümü değil dikkat etmelidir, ve en son sürümü kullanılabilir yükseltmelisiniz.

+1

Rails 2.3.5 ile aynı sorun. Güncellemeyi 2.3.9'a kadar gerçekleştirdim ve şimdi beklendiği gibi çalışıyor. – rchampourlier

2

Yerel olarak i18n-0.5.0 kaldırılarak sabitlendim. (Doğru interpolated dize dönerken)

i18n 0.4.0 verim deneme:

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' 

Ben 0.5.0 olmayan interpolated dizeleri çıkışı yaparak ağrı ortaya çıkıyor sanırım.


i18n ActiveSupport gerektirdiği, bu yüzden etrafta en son sürümünü (0.5.0) yüklenirken var yoldur: Bunu daha önce yükler

config

/preinitializer.rb ('gizli' yaşam döngüsü kanca ActiveSupport): Sürüm

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

Bunun benim için de “sabit” olduğuna inanıyorum, fakat “sabit” ifadesinin alıntılarda olduğuna dikkat edin. – tybro0103

12

Kaldığım eski bir 2.3.5 Raylar uygulamasında da bu sorunla karşılaştım. Yüklenmiş i18n geminin 5.0 sürümü vardı. % {} Sözdizimini gerektirdiğini gördüm. hüner config/yerel/en.yml bu did yapmak:


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

bir çekicilik gibi çalışır! – huug

+0

Çok güzel! Ama şimdi hala şu gibi şeyler elde ediyorum: "{{count}} hata" {model}} kaydedilmemesi " – tybro0103

+0

Devralınan bir kaynak sorunu gibi geliyor. Birkaç ay önce geri döndüm ama maalesef tam olarak düzeltmeyi hatırlamıyorum. Kaynağın içinde miras kaldığını varsayarsak, o yöne bakarım. İyi şanslar! –

0

Burada nitelik, mesaj, sayım, ve model sorunlarını çözer benim tam config/yerel ayarlar/en.yml bu.http://guides.rubyonrails.org/i18n.html

tr: ActiveRecord: hataları: full_messages: biçimi: "% {nitelik}% {mesaj}" şablonu: başlık: tek: "1 hata burada KO docs bu var kaydedilmesini bu% {modeli} yasak" diğer: '% {count} hatalar

1

yüzden bu

için çözüm olarak yükseltme raylar görmeye devam' kaydedilmesini bu% {modeli} yasak .. . veya basitçe düşürülebilir Versiyon 0.4

için i18n/lib/yakut/mücevherler/1.8/mücevherler/activerecord-2.3.x/lib/active_record/yerel dir_of_ruby ve düzenlemek için bu yazı

getting {{attribute}} {{message}} in RoR views

1

Git belirtildiği gibi en.yml ... ...% {değişken} benim için çalıştı

için {{değişkeni}} yerine

PS: belki yolu sizin için farklı olurdu. Size kolaylık sağlamak.

1

i18n gemine sahip olmayan işyerinde Rails 2.3.5 sunucusunda çalışıyorum. Tuhaf olan şey, kodum yerel olarak çalışırken, bu problemi çalışma sunucusunda var. Ve aynı kesin donmuş taşlar ile sahip olduğum başka bir uygulama, iş sunucusunda bu sorunu görüntülemiyor.

Yukarıda gibi activerecord en.yml dosyası değişti ama aynı zamanda hata mesajı başlık/başlık hakkını almak için actionpack en.yml dosyasını değiştirdi: Onunla uğraşmadı, aynı zamanda

\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"  

ama Eğer sayımlarını ihtiva hata mesajları varsa, o (gibi) activerecord en.yml dosyasında çok mesajlardan bazıları sözdizimini değiştirmek gerekiyordu benziyor:

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

Bu teknik, Rails geminin tümünün 'vendor /' altına kurulmasını gerektirir mi, yoksa sadece 'en.yml' dosyalarını kaydetti ve standart Rails yerel ayarları alınıp geçersiz kılınabilir mi? – ilasno

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

yüklemeye i18n gem int o satıcı klasörü (sadece kapak altında neler olup bittiğini görmek için ayrıntılı çıktı için -V)

+0

gerçekten beni kurtardın – Maysam

İlgili konular