2017-03-20 1 views
0

Google 모델의 whodunnit 값은 User과 같이 "22"과 같이 id22 인 문자열입니다.PaperTrail : 사용자 * 및 * AdminUsers 모두가 변경 사항을 추적 할 때 차별화하는 방법은 무엇입니까?

문제는 우리가 UserAdminUser 모델을 사용하여 메시지를 추적하는 것입니다. 내가 PaperTrail 새로운 조금 해요하지만 자신의 문서를 통해 내 방식대로 일이 아니라 할 수

def user_for_paper_trail 
    current_user || current_admin_user 
end 

: 따라서, 변화 대신, 사용자에 의해 또는 한 경우 관리 사용자에 의해, 이야기하는 것은 불가능합니다 어떤 해결책도 생각해 내십시오. 그것은 이상한 요청 일지 모르지만 그럴만 한 가치가있는 임의의 필드처럼 무언가를 좋아할 것입니다. type. 또는 컨트롤러에 따라 특정 변경 사항 만 추적하는 방법 (이 경우 AdminPanel을 통해 변경된 내용 만 추적하기 때문에 작동합니다).

제안이나 안내에 감사드립니다.

+0

역할별로 관리자를 구분하는 통합 된 'User' 모델을 사용하는 것은 옵션이 아닙니까? – nicooga

답변

1

PaperTrail는 id 때문에 이러한 두 가지 이유 중 하나로 저장된다

  • 탐정 소설은 PaperTrail 제공하는 기본 before_action를 사용하여 할당되고 있으며 your user_for_paper_trail 방법에 의해 리턴되는 값에 .id 호출된다.

또는

  • 앱 수동 user_for_paper_trail 방법의 결과에 .id를 호출합니다.

User 또는 AdminUserid의 보편적 독특한 아니기 때문에, 당신은 다른 값을 저장해야합니다.

whodunnit 값은 사용자가 결정하는 모든 문자열 일 수 있습니다. UsersAdminUsers을 구별하는 데 사용할 수있는 고유 식별자가있는 경우 해당 값을 저장해야합니다. 나는 당신의 문제를 해결할 수 있습니다 이러한 옵션 중 하나를 생각하고

는 :

email는 두 개의 사용자 모델 사이 고유 경우
  1. 대신 ID의 이메일을 저장합니다.

  2. email이 고유하지 않으면, 당신은 사용자 모델 유형 및 ID (예 : 'User: 1' 및/또는 'AdminUser: 1') 모두를 표시하는 문자열을 저장할 수, 당신이 갈 때 당신의 문자열을 구문 분석 할 수있는 whodunnit 값을 가져올 수 사용자 모델 및 ID를 입력 한 다음 해당 정보를 적절하게 사용하십시오.

  3. PaperTrail details how to find out who was responsible for a change의 내용을 읽고 비슷한 사용자 지정 솔루션 (또는 another option)을 제안하십시오.

+0

감사합니다. @ecnalyr.나는 # 2가 내가 바라는 바를 따라 가고 있다고 느낀다. 그러나 당신이 링크 한 문서에서 나는 그것에 대해 아무 것도 보지 못했다. (나는 오늘 그 전에 읽었다. 아마도 나는 그것을 놓쳤다.) – TCannadySF

+1

미래의 탐험가를 위해 : 위의 솔루션에 기대어 모델의 관리자 패널에'before_filter'를 추가하기로 결정했습니다. 그 안에'whodunnit'의 값을 다음과 같이 설정했습니다 :'PaperTrail.whodunnit = "AdminUser : # {current_admin_user.id}"' – TCannadySF

관련 문제