[英]Ruby On Rails help on Paper_trail gem
因此,我有一個帶有用戶身份驗證和某些模型的歷史記錄跟蹤的項目。 對於我使用paper_trail gem的歷史記錄,我有一個過濾歷史記錄以顯示給用戶的問題,我將其配置為將current_user id跟蹤到Whodunnit字段中。 我的用戶有role_id,它從Roles表中指定了角色。另外,我還有另一個表,其中包含具有id和user_id字段的某些項目。 現在我的問題是如何根據用戶的角色從Versions表中獲取特定的行,例如ex:如果用戶角色為“ SomeRole”,則它僅返回由具有相同角色“ SomeRole”的用戶執行的那些操作'。 我知道我可以采取所有行動
@versions = PaperTrail::Version.order('created_at')
但不知道如何過濾以僅選擇滿足我用途的那些。 有沒有簡單的方法可以做到呢?還是我應該像逐個選擇那樣對其進行硬編碼,而不是檢查其角色的所有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' })
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.