Ruby 关于 Rails 帮助 Paper_trail gem
Ruby On Rails help on Paper_trail gem
所以我有一个项目,可以对用户进行身份验证,并对某些模型进行历史跟踪。对于我使用 paper_trail gem 的历史记录,我在过滤历史记录以显示给用户时遇到问题,我已将其配置为跟踪 current_user id 到 Whodunnit 字段中。
我的用户有 role_id,它指定角色 table 中的角色
我还有另一个 table,其中一些项目具有 id 和 user_id 字段。现在我的问题是如何根据用户的角色从版本 table 中获取特定的行,例如:如果用户角色是 'SomeRole' 它必须 return 只有那些完成的操作由具有相同角色的用户 'SomeRole'。
我知道我可以通过
完成所有操作
@versions = PaperTrail::Version.order('created_at')
但不知道如何筛选出 select 只有满足我的使用需求的那些。有没有一种简单的方法可以做到这一点,或者我应该像 select 一样对它进行硬编码,而不是检查所有 user_id 他们的角色等等?希望你能理解我乱七八糟的解释方式
在类似的情况下,我使用了这个解决方案:
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' })
所以我有一个项目,可以对用户进行身份验证,并对某些模型进行历史跟踪。对于我使用 paper_trail gem 的历史记录,我在过滤历史记录以显示给用户时遇到问题,我已将其配置为跟踪 current_user id 到 Whodunnit 字段中。 我的用户有 role_id,它指定角色 table 中的角色 我还有另一个 table,其中一些项目具有 id 和 user_id 字段。现在我的问题是如何根据用户的角色从版本 table 中获取特定的行,例如:如果用户角色是 'SomeRole' 它必须 return 只有那些完成的操作由具有相同角色的用户 'SomeRole'。 我知道我可以通过
完成所有操作@versions = PaperTrail::Version.order('created_at')
但不知道如何筛选出 select 只有满足我的使用需求的那些。有没有一种简单的方法可以做到这一点,或者我应该像 select 一样对它进行硬编码,而不是检查所有 user_id 他们的角色等等?希望你能理解我乱七八糟的解释方式
在类似的情况下,我使用了这个解决方案:
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' })