有没有办法在Papertrail中限制每个型号的版本数量?
例如,我知道我可以用
设置全局限制PaperTrail.config.version_limit = 3
但我没有看到为每个模型设置的方法,例如
class Article < ActiveRecord::Base
has_paper_trail :limit => [10]
end
我也不想仅限制保存的版本数量(比如说十个),但只保留最后十个版本(与config
版本设置相同)。
答案 0 :(得分:6)
以下是您想要的答案:
将常量“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
将以下代码添加到PaperTrail配置文件的底部
# /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
享受吧! :d
答案 1 :(得分:1)
添加以下初始化程序:
# /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
然后,您可以在任何要为其指定替代限制的模型中定义version_limit
。
def version_limit
20
end
答案 2 :(得分:0)
对于Paper Trail 11.0.0,限制了gem支持的创建版本的数量: https://github.com/paper-trail-gem/paper_trail#2e-limiting-the-number-of-versions-created
例如:
# At most 3 versions (2 updates, 1 create). Overrides global version_limit.
has_paper_trail limit: 2
答案 3 :(得分:-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