2012-07-07 26 views
27

Bazı doğrulamaları benim modellerinde tekrarlayan şunlardır:Raylar validasyonu bir modül karışımına mı koyuyor?

validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true 
validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true 

nasıl mixin o koymuşlar? (Muhtemelen yaptıklarını gibi) Ben sadece modülün, validates makro includer bağlamında değerlendirilmesi gereken

app/models/validations.rb:5: undefined method `validates' for Validations:Module (NoMethodError) 

cevap

44
module Validations 
    extend ActiveSupport::Concern 

    included do 
    validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true 
    validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true 
    end 
end 

bir mixin içinde koy ben bu hatayı alıyorum. Sonra modelinde

module CommonValidations 
    extend ActiveSupport::Concern 

    included do 
    validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true 
    validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true 
    end 
end 

:

+4

Gerçekte, ActiveSupport :: Endişeleri yerine 'ActiveSupport :: Concern' olması gerektiğine inanıyorum (bunu tek bir karakter düzenleme olduğundan düzenlememe izin vermeyeceğim.) –

+0

@KyleDaigle Evet haklısınız. Orijinal gönderiyi güncelledim. –

+0

Raylarda bunu yapmanın bir yolu var mı? 2 – CantGetANick

26

Sizin modülü bu gibi görünmelidir ben kod biraz daha anlaşılır hale getirmek için buraya ActiveSupport::Concern kullanıyorum

class Post < ActiveRecord::Base 
    include CommonValidations 

    ... 
end 

.

+1

Rails 2'de test etmek mümkün mü? Örneğin Rails 3'te bir sınıf testi oluşturmak için ActiveModel'i kullanabilirsiniz; Neye ihtiyacımız var. ve sonra bu modül için özellikler yazınız. Ama Rails 2 sürümü hakkında ne yapılabilir? – oivoodoo

+2

http://weblog.jamisbuck.org/2007/1/17/concerns-in-activerecord – CantGetANick

İlgili konular