获取PaperTrail中的所有item_types

时间:2017-02-14 15:56:19

标签: ruby-on-rails ruby ruby-on-rails-5

在PaperTrail中,我可以按" item_type"过滤事件。有没有办法获得所有不同的项目类型?文档中没有任何内容。

1 个答案:

答案 0 :(得分:0)

跟进你的问题,我认为检索项目类型最简单的方法就是查看哪些模型有has_paper_trail调用,但是,这不适用于多态模型(User - Student - Instructor)。但是,你问了一个不同的表来存储项目类型,也许你可以添加它。你可以用这种方式覆盖PaperTrail :: Version模型:

module PaperTrail
  class Version < ActiveRecord::Base #(rails <= 4.x)

  after_commit :add_item_type

  def add_item_type
    item_type_object 
      = VersionItemType.where(item_type: self.item_type).first ||
        VersionItemType.new(item_type: self.item_type)
    item_type.save
  end

现在,您需要VersionItemType的模型类和迁移:

create_table :version_item_types do |t|
  t.string :item_type
  t.timestamps
end

class VersionItemType < ActiveRecord::Base #(rails <= 4.x)
  validates :item_type, presence: true
end

所以,在paper_trail存储每个版本之后,它会在新表中添加一个唯一的item_item

编辑:如果你这样做,你将不得不创建一个rake任务或者用存储的item_types来填充表格