在 Papertrail 中设置每个模型的版本限制?
Set version limit per model in Papertrail?
有没有办法在 Papertrail 中限制每个模型的版本数量?
例如,我知道我可以使用
设置全局限制
PaperTrail.config.version_limit = 3
但我没有找到一种方法来设置每个模型,比如
class Article < ActiveRecord::Base
has_paper_trail :limit => [10]
end
我也不想只限制保存的版本数量(比如十个),而是只保存最新的十个版本(与 config
版本设置相同)。
考虑使用 if:
语法有选择地关闭文件跟踪:
has_paper_trail :if => Proc.new { |model| model.versions.count > 10 }
来自文档的细节:https://github.com/airblade/paper_trail#choosing-when-to-save-new-versions
这里有你想要的答案:
将常量 "PAPER_TRAIL_VERSION_LIMIT" 添加到您的 Article 模型中,如下所示
# 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
添加以下初始化程序:
# /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
至于 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
有没有办法在 Papertrail 中限制每个模型的版本数量?
例如,我知道我可以使用
设置全局限制PaperTrail.config.version_limit = 3
但我没有找到一种方法来设置每个模型,比如
class Article < ActiveRecord::Base
has_paper_trail :limit => [10]
end
我也不想只限制保存的版本数量(比如十个),而是只保存最新的十个版本(与 config
版本设置相同)。
考虑使用 if:
语法有选择地关闭文件跟踪:
has_paper_trail :if => Proc.new { |model| model.versions.count > 10 }
来自文档的细节:https://github.com/airblade/paper_trail#choosing-when-to-save-new-versions
这里有你想要的答案:
将常量 "PAPER_TRAIL_VERSION_LIMIT" 添加到您的 Article 模型中,如下所示
# 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
添加以下初始化程序:
# /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
至于 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