Rails 3,PaperTrail和Whodunnit用户实例

Edu*_*rdo 5 ruby-on-rails-3 paper-trail-gem

我有一个City类,其版本由PaperTrail控制.我的系统拥有由Devise管理的用户.我想在编辑特定版本的City类的用户之间建立关系.

为此,我尝试使用Rails 3.2.15和Paper Trail 3.0.0进行以下配置:

class City < ActiveRecord::Base
  has_paper_trail
end

class User < ActiveRecord::Base
  has_many :editions, :foreign_key => 'whodunnit', :class_name => "PaperTrail::Version"
end

class PaperTrail::Version < ActiveRecord::Base
  belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

有了这个,我可以拥有特定用户制作的版本,例如:

User.last.editions 从上一个用户获取版本列表(PaperTrail :: Version对象).

然后,我这将是简单的有实例谁编辑特定的城市,例如,让谁编辑第一城的最后一个版本的用户的用户实例的用户:

# NoMethodError: undefined method `user' for #<PaperTrail::Version:0x000000051d0da8>
City.first.versions.last.user
Run Code Online (Sandbox Code Playgroud)

如果不是这样,我应该如何配置我的模型以访问PaperTrail :: Version上的"user"方法?

Ps.:我不确定我是否应该像我一样创建Model PaperTrail :: Version,但我没有想出另一种方向.

Edu*_*rdo 13

我自己找到了答案.一切都基于子类化PaperTrail :: Version并使用:class_name选项.我的工作配置是:

class City < ActiveRecord::Base
  has_paper_trail, :class_name => 'Version'
end

class User < ActiveRecord::Base
  has_many :editions, :foreign_key => 'whodunnit', :class_name => "Version"
end

class Version < PaperTrail::Version
  belongs_to :user, :foreign_key => 'whodunnit'
end
Run Code Online (Sandbox Code Playgroud)

现在,在为特定版本调用用户时,它会返回用户whodunnit实例

City.first.versions.last.user
=> #<User id: 2, email: "xxxxxx@yyyyy.com", encrypted_password: ...>
Run Code Online (Sandbox Code Playgroud)