【发布时间】:2015-10-21 09:50:21
【问题描述】:
当我将 rails 3.2 迁移到 rails 4.2 时,我使用 paper_trail 来跟踪跨国变化,遇到以下问题:
NoMethodError - 未定义的方法 `timestamp_sort_order' 用于
【问题讨论】:
标签: ruby ruby-on-rails-4.2 paper-trail-gem
当我将 rails 3.2 迁移到 rails 4.2 时,我使用 paper_trail 来跟踪跨国变化,遇到以下问题:
NoMethodError - 未定义的方法 `timestamp_sort_order' 用于
【问题讨论】:
标签: ruby ruby-on-rails-4.2 paper-trail-gem
我通过在初始化器 paper_trail.rb 文件中添加以下行来解决此问题
PaperTrail::Rails::Engine.eager_load!
查看我的最终初始化程序/paper_trail.rb 文件
PaperTrail.config.track_associations = false
PaperTrail::Rails::Engine.eager_load!
module PaperTrail
class Version < ActiveRecord::Base
.....
end
end
问题已解决....
已经更新了我的答案,在 rails 5.2 中使用它添加了下面的额外内容
PaperTrail.config.track_associations = false
【讨论】:
在 rails 6.0.0beta3 上得到了这个,因为我修补了 papertrail 并忘记添加 PaperTrail::VersionConcern,例如:
module PaperTrail
class Version < ::ActiveRecord::Base
include PaperTrail::VersionConcern
end
end
PaperTrail::Rails::Engine.eager_load! 没有为我修复它
查看source code,它直接在ActiveRecord::Base 模型上调用它,它是在PaperTrail::VersionConcern 上定义的。
【讨论】:
在 Rails 6 中,现在首选的方法是创建模型,不要将模型代码放在初始化程序中。这就是我正在使用的......
module PaperTrail
class Version < ::ActiveRecord::Base
include PaperTrail::VersionConcern
belongs_to :user, foreign_key: :whodunnit
end
end
【讨论】: