所以我有一个项目,包括用户身份验证和某些模型的历史记录跟踪。对于我使用paper_trail gem的历史记录,我有一个过滤历史记录以向用户显示的问题,我已将其配置为跟踪whodunnit字段中的current_user id。 我的用户有role_id,它指定Roles表中的角色 另外我有另一个表,其中包含一些具有id和user_id字段的项目。现在我的问题是如何根据用户的角色从Versions表中获取特定的行,比如ex:如果用户角色是' SomeRole'它必须只返回具有相同角色的用户所做的那些操作' SomeRole'。
我知道我可以采取所有行动jmap -F -dump:live,format=b,file=<file_name.hprof> <process_id>
但不知道如何过滤以仅选择那些令我满意的用途。有没有一种简单的方法可以做到这一点,或者我应该像逐个选择一样硬编码,而不是检查他们角色的所有user_id等等?希望你理解我凌乱的解释方式
答案 0 :(得分:0)
在类似的情况下,我使用了这个解决方案:
1)在版本
中添加了user_id字段class AddUserIdToVersions < ActiveRecord::Migration
def change
add_column :versions, :user_id, :integer
add_index :versions, :user_id
end
end
(whodunnit是一个文本字段,我不想将它用作关联键)
2)版本模型中定义的关联:
# /app/models/version.rb
class Version < PaperTrail::Version
belongs_to :user
# ... some other custom methods
end
并在用户模型中:
has_many :versions
3)在ApplicationController中(或您需要的地方)设置info_for_paper_trail
def info_for_paper_trail
{ user_id: current_user.try(:id) } if user_signed_in?
end
所以我可以访问以下版本:
@user.versions
所以在你的情况下,它将是:
Version.joins(:user).where(users: { role: 'SomeRole' })