2016-04-06 20 views
0

Papertrailでモデルごとにバージョン数を制限する方法はありますか?Papertrailでモデルごとにバージョン制限を設定しますか?

例えば、私は

PaperTrail.config.version_limit = 3 

とグローバル制限を設定することができます。しかし、私は「私もドン

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

ようなもので、モデルごとにこれを設定する方法が表示されていない知っています保存されたバージョンの数を制限するだけで(例えば10)、最新の10個だけが保存されるようにします(configのバージョン設定と同じです)。

+0

私は、ここで説明するように、異なる目的のために異なる構成を実現するためにサブクラスを使用しています:https://github.com/airblade/paper_trail#custom-version-classes howerあなたは、異なるバージョンのテーブルを持ってしまいますと、私はそれがあなたが欲しいものであるかどうかわからない – siax

答えて

4

はあなたが欲しい答えです:

はに一定の "PAPER_TRAIL_VERSION_LIMIT" を追加します。次のような記事モデル

# 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 

PaperTrailコンフィグファイルの末尾にコードの下に追加は、それをお楽しみください! :そして、あなたは単にあなたがのための代替制限を指定したい任意のモデルに version_limitを定義することができ

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

:D

+1

これは、if item.is_aの代わりに 'item.class.const_defined?(" PAPER_TRAIL_VERSION_LIMIT ")'でより一般的ではないでしょうか? Article' –

+0

こんにちは@ブリュノペレス、あなたの考えはそれをより良くする。ありがとうございました! – thanhnha1103

-1

を選択紙の証跡をオフにするif:構文を使用して考えてみましょう:ドキュメントから

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

細目:ここhttps://github.com/airblade/paper_trail#choosing-when-to-save-new-versions

+0

これは私が探しているものではありません。これは、最初の10のバージョンを保存し、その後、直近の10を保存するのではなく、停止します。 – chrismanderson

1

は、次の初期化子を追加します。

def version_limit 
    20 
end 
関連する問題