2016-12-14 2 views
0

그래서 사용자 인증과 일부 모델의 기록 추적 프로젝트가 있습니다. 필자는 paper_trail 보석을 사용한 역사에 대해 사용자에게 표시 할 기록을 필터링하는 문제가 있으며, current_user ID를 Whodunnit 필드로 추적하도록 구성했습니다. 내 사용자가 역할 테이블에서 역할을 지정하는 role_id가 있습니다. 또한 id 및 user_id 필드가있는 일부 항목이있는 다른 테이블이 있습니다. 그리고 지금 내 문제는 이전 버전처럼 사용자의 역할에 따라 Versions 테이블에서 특정 행을 취하는 방법입니다. 사용자 역할이 'SomeRole'인 경우 동일한 역할을 가진 사용자가 수행 한 작업 만 반환해야합니다 'SomeRole '. 내가Ruby On Rails의 Paper_trail gem에 대한 도움말

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

에 의해 모든 조치를 취할 수 있다는 것을 알고 있지만 내 용도로 만족하는 자들을 선택하는 필터링하는 방법에 대한 아무 생각이 없습니다. 쉽게 할 수있는 방법이 있습니까? 또는 하나씩 선택하는 것과 같이 하드 코드해야합니다. 역할의 모든 user_id를 확인하는 등의 작업을합니다. 당신은 내가이 솔루션을 사용하는 비슷한 상황에서

답변

0

을 설명 내 지저분한 방법을 이해 희망 :

1) 버전

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

에 USER_ID 필드 추가를 (탐정 소설 텍스트 필드 내가 원하지 않았다

# /app/models/version.rb 

class Version < PaperTrail::Version 
    belongs_to :user 

    # ... some other custom methods 
end 
,369 : 버전 모델의 연결 키)

2) 정의 연결로 사용하기

및 사용자 모델 :

@user.versions 
(또는 당신이 그것을 필요로하는 곳에)

def info_for_paper_trail 
    { user_id: current_user.try(:id) } if user_signed_in? 
    end 

그래서 내가 좋아하는 버전에 액세스 할 수 있어요와 ApplicationController에 info_for_paper_trail 설정

has_many :versions 

3)

귀하의 경우에는 다음과 같습니다 :

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

덕분에 정말 도움이되었습니다. – Hatik