2010-08-08 27 views
11

ActiveRecord :: Hataları Rails 3 değiştirme nedir? Raylar 2.3.8 yılındaActiveRecord :: Hataları için Rails 3 değiştirme nedir?

, bu bir nesnedir:

>> ActiveRecord::Errors 
NameError: uninitialized constant ActiveRecord::Errors 
from (irb):2 

Ben wizardly jeneratör çalışması yapmaya çalışıyorum: Raylar 3.0.0rc olarak

>> ActiveRecord::Errors 
=> ActiveRecord::Errors 

, bir NameError olsun Raylar ile 3.

$ rails g wizardly_scaffold home 

Ama başarısız:

/Library/Ruby/Gems/1.8/gems/wizardly_gt-0.1.8.9/lib/validation_group.rb:150: 
uninitialized constant ActiveRecord::Errors (NameError) 

o da şudur atıfta hattı:

ActiveRecord::Errors.send :include, ValidationGroup::ActiveRecord::Errors 

başlarında dosyasında görürüz:

module ValidationGroup 
    module ActiveRecord 
... 
    module Errors # included in ActiveRecord::Errors 
     def add_with_validation_group(attribute, msg = I18n.translate('activerecord.errors.messages')[:invalid], *args, &block) 
     add_error = @base.respond_to?(:should_validate?) ? (@base.should_validate?(attribute.to_sym) || attribute == :base) : true 
     add_without_validation_group(attribute, msg, *args, &block) if add_error 
     end 
... 
end 
+1

Ryan, aşağıdaki doğru değişimi işaret ediyor. Ancak, bu sihirbazlıkla çalışmak (hatta iskeleleri işe almak) elde etmek için yeterli değildir. Bu önemli bir iş gerektirecektir. –

+0

Sonunda Rails 3 ile sihirbazlıkla çalıştınız mı? – peku

+0

Ben yapmadım. Doğrulama grubu yerine grouped_validation (yani raylar 3 ile çalışır) kullanmayı denedim, ancak hiçbir zaman çalışmadı. Projeye devam etmek için 2.3.8'e geri döndüm. İsterseniz, çalışmaya devam edebilmeniz için sihirbazlık hacklenmiş sürümümü kazabilirim. –

cevap

12

Yani ActiveModel::Errors olurdu. Doğrulama, Veri Eşleştiricisi, Mongoid vb. Gibi tüm ORM Railtileri için Rails ile bağlantı kurmak için ortak bir API sağlamak amacıyla doğrulama ve hata işleme gibi şeyler Active Model'e taşındı.

Bu sihirbaz eklentisi ActiveModel ilk olup olmadığını denetlemek için görünür ve varsa ActiveRecord::Errors yerine hata işleme orada dahil edin. Önemsiz bir değişiklik.

0

bu taş deneyin

http://rubygems.org/gems/wizardly_gt

ben sadece sadece wizardly ile oynamaya başlar, ancak yukarıda en az Raylar ile uyumlu görünmektedir 3.

+0

wizardly_gt kullandım ve Gavin e-postayla gönderdim. Rails 3 ile çalışmıyor. –

0

wizardly besbelli yapar çok daha fazla, ama Rails3 uyumluluğu için güncellediğim validation_scopes'u kontrol etmelisiniz. Nesneleri özelliklere göre gruplamak yerine, yalnızca isim verilen koleksiyon hatalarını oluşturarak farklı onay gruplarını açıkça bildirmenize izin verir. Dahili olarak çok daha basit bir uygulama (aynı kod Ray 2 ve 3'ü işler). Şahsen bu özelliği, niteliklere göre gruplandırmaya göre daha esnek buluyorum (örneğin, bir özniteliğin, örneğin bir sihirbazın farklı adımlarında farklı kısıtlamaları varsa ne olurdu?).