2016-04-06 23 views
0

Modelde, model başına model sayısını sınırlamanın bir yolu var mı?Papertrail'de model başına sürüm sınırı belirlediniz mi?

Örneğin, ben

PaperTrail.config.version_limit = 3 

ile küresel bir sınır koyabilirsiniz biliyorum Ama

class Article < ActiveRecord::Base 
    has_paper_trail :limit => [10] 
end 

gibi bir şeyle, model başına o ayarlamak için bir yol göremiyorum ben de 'yok Sadece kaydedilen sürümlerin sayısını (sadece on) sınırlamak istersiniz, ancak bunu sadece en son on kaydedilir (config sürüm ayarında olduğu gibi). dokümanlardan

has_paper_trail :if => Proc.new { |model| model.versions.count > 10 } 

Özelliğe:

+0

Burada anlatılan: https://github.com/airblade/paper_trail#custom-version-classes hower farklı versiyon tabloları sahip bitireceğiz ve İstediğiniz bir şey olup olmadığından emin değilim – siax

cevap

4

istediğiniz cevaptır Makale modeliniz

# models/article.rb 
class Article < ActiveRecord::Base 
    has_paper_trail 
    # 10 mean you article will have 11 version include 'create' version 
    PAPER_TRAIL_VERSION_LIMIT = 10 
end 

# /config/initializers/paper_trail.rb 
module PaperTrail 
    class Version < ActiveRecord::Base 
    private 
    def enforce_version_limit! 
     limit = PaperTrail.config.version_limit 
     # This is the key custom line 
     limit = item.class::PAPER_TRAIL_VERSION_LIMIT if item.class.const_defined?("PAPER_TRAIL_VERSION_LIMIT") 
     return unless limit.is_a? Numeric 
     previous_versions = sibling_versions.not_creates 
     return unless previous_versions.size > limit 
     excess_versions = previous_versions - previous_versions.last(limit) 
     excess_versions.map(&:destroy) 
    end 
    end 
end 

Enjoy it PaperTrail yapılandırma dosyasının altına kodları altında ekleyin! : D

+1

"item.class.const_defined?" ("PAPER_TRAIL_VERSION_LIMIT") 'yerine 'item.is_a? Makale ' –

+0

Merhaba @BrunoPeres, fikrinizi daha iyi hale getirin. Teşekkür ederim! – thanhnha1103

1

aşağıdaki başlatıcı ekleyin:

# /config/initializers/paper_trail.rb 
module PaperTrail 
    module VersionConcern 
    private 

    def enforce_version_limit! 
     limit = defined?(version_limit) ? version_limit : PaperTrail.config.version_limit 
     return unless limit.is_a? Numeric 
     previous_versions = sibling_versions.not_creates 
     return unless previous_versions.size > limit 
     excess_versions = previous_versions - previous_versions.last(limit) 
     excess_versions.map(&:destroy) 
    end 
    end 
end 

Sonra sadece sizin için alternatif bir sınır belirtmek istediğiniz herhangi modelinde version_limit tanımlayabilirsiniz.

def version_limit 
    20 
end 
ben gibi farklı amaçlar için farklı yapılandırma elde etmek için subclassing kullanıyorum
İlgili konular