簡體   English   中英

Ruby On Rails幫助Paper_trail gem

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM