2016-04-06 3 views
0

Gibt es eine Möglichkeit, die Anzahl der Versionen pro Modell in Papertrail zu begrenzen?Festlegen der Versionsbeschränkung pro Modell in Papertrail?

Eg, ich weiß, ich eine globale Grenze mit

PaperTrail.config.version_limit = 3 

einstellen Aber ich sehe keinen Weg, dass pro Modell zu setzen, mit so etwas wie

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

I don auch‘ Ich möchte nur die Anzahl der gespeicherten Versionen begrenzen (um zehn zu sagen), aber es sind nur die letzten zehn gespeichert (wie bei der Version config Einstellung).

+0

I Subklassifizieren bin mit unterschiedlicher Konfiguration für verschiedene Zwecke zu erreichen, wie hier beschrieben: https://github.com/airblade/paper_trail#custom-version-classes hower Sie andere Version Tabellen am Ende mit und Ich bin mir nicht sicher, ob das etwas ist, was Sie wollen – siax

Antwort

4

Hier ist die Antwort, die Sie wollen:

hinzufügen Konstante "PAPER_TRAIL_VERSION_LIMIT" zu Ihr Artikelmodell wie unten

# 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 

unten Codes auf den Grund Datei PaperTrail Config

# /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 

Genießen Sie es hinzufügen! : D

+1

Wäre das nicht generischer mit 'if item.class.const_defined? (" PAPER_TRAIL_VERSION_LIMIT ")' anstelle von 'if item.is_a? Artikel' –

+0

Hallo @BrunoPeres, deine Idee macht es besser. Vielen Dank! – thanhnha1103

1

die folgenden initializer hinzufügen:

# /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 

Dann einfach version_limit in jedem Modell definieren Sie können Sie für eine alternative Grenze festlegen mögen.

def version_limit 
    20 
end 
Verwandte Themen