2016-12-14 4 views
0

So habe ich ein Projekt mit Authentifizierung von Benutzern und Verlaufsverfolgung einiger Modelle. Für die Geschichte, die ich den Edelstein paper_trail benutze, habe ich ein Problem des Filterns des Verlaufs, um dem Benutzer zu zeigen, ich habe es so konfiguriert, die current_user ID in das Feld Whodunnit zu verfolgen. Mein Benutzer hat role_id, die die Rolle aus der Rolle Tabelle angibt Auch ich habe eine andere Tabelle mit einigen Elementen, die ID und user_id Felder haben. Und jetzt ist mein Problem, wie man bestimmte Zeilen aus der Versionstabelle entsprechend der Rolle des Benutzers nimmt, wie für ex: wenn die Benutzerrolle 'SomeRole' ist, muss sie nur diejenigen Aktionen zurückgeben, die von den Benutzern mit der gleichen Rolle 'SomeRole' ausgeführt werden ". Ich weiß, dass ich die Aktionen alle nehmen könnenRuby On Rails Hilfe auf Paper_trail gem

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

haben aber keine Ahnung, wie diejenigen, die für meine Anwendungen nur zufriedenstellen zu filtern, zu wählen. Gibt es einen einfachen Weg, es zu tun oder sollte ich es hart wie die Auswahl eines nach dem anderen, als alle user_id ihrer Rollen und so weiter überprüfen? Hoffen, dass Sie meine unordentliche Art und Weise verstanden zu erklären, ich

Antwort

0

In ähnlicher Situation diese Lösung verwendet:

1) Hinzugefügt User_id Feld Versionen

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

(whodunnit ist ein Textfeld, und ich wollte nicht, dass zu verwenden, um es als Assoziationsschlüssel)

2) Definierte Verein in Version Modell:

# /app/models/version.rb 

class Version < PaperTrail::Version 
    belongs_to :user 

    # ... some other custom methods 
end 

und in User-Modell:

has_many :versions 

3) in Application Set info_for_paper_trail (oder wo Sie es brauchen)

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

Ich bin in der Lage zu So Versionen zugreifen wie:

@user.versions 

In Ihrem Fall wäre es also:

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

danke das hat wirklich geholfen – Hatik