2016-12-14 8 views
0

私はユーザーの認証といくつかのモデルの履歴の追跡に関するプロジェクトを持っています。私がpaper_trailの宝石を使った歴史については、ユーザーに表示する履歴をフィルタリングするという問題があり、current_user idをWhodunnitフィールドに追跡するように設定しました。 私のユーザは、ロールテーブルからロールを指定するrole_idを持っています また、私はidとuser_idフィールドを持ついくつかのアイテムを持つ別のテーブルを持っています。そして、今私の問題は、例えば、ユーザーロールが 'SomeRole'の場合、同じ役割を持つユーザーが行ったアクションのみを返さなければならない場合のように、ユーザーの役割に応じてVersionsテーブルから特定の行を取り出す方法です。 'SomeRole ' 私はPaper_trail gemに関するRuby On Railsのヘルプ

@versions = PaperTrail::Version.order('created_at') 

ですべてのアクションを取ることができることを知っているだけで、私の用途に満足されているものを選択するようにフィルタリングする方法については考えています。それを行う簡単な方法はありますか?または、自分の役割のすべてのuser_idをチェックするよりも、それを順番に選択するようにハードコードする必要がありますか? whodunnitがテキストフィールドであると私はしたくなかった(

class AddUserIdToVersions < ActiveRecord::Migration 
    def change 
    add_column :versions, :user_id, :integer 
    add_index :versions, :user_id 
    end 
end 

バージョンへのuser_idフィールドを追加しました)

1:あなたは、私はこのソリューションを使用し、同様の状況では

答えて

0

を説明する私の汚いやり方を理解ホープ

# /app/models/version.rb 

class Version < PaperTrail::Version 
    belongs_to :user 

    # ... some other custom methods 
end 
:バージョンモデルの関連キー)

2)確定協会としてそれを使用するには

とUserモデルに:

@user.versions 

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 

だから私のようなバージョンにアクセスすることができますよ

あなたの場合は、それはでしょう:

Version.joins(:user).where(users: { role: 'SomeRole' }) 
+0

本当に助けてくれてありがとう – Hatik

関連する問題