2017-05-29 8 views
0

Ich muss ein Projekt basierend auf Einladungen autorisieren, die ein Lieferant bekommen hat. Der Lieferant hat ein Feld "user_id".Pundit autorisieren von einem anderen Modell

project.rb

has_many :invites 
has_many :suppliers, :through => :invites 

project_policy.rb

class ProjectPolicy < ApplicationPolicy 
    attr_reader :user, :project 

    def initialize(user, project) 
    @user = user 
    @project = project 
    end 

    def show? 
    ##need help on the next line## 
    if project.joins(:invites).joins(:suppliers).pluck("suppliers.user_id") == user.id 
     return true 
    else 
     return false 
    end 
    end 
end 

Wie ich nur die entsprechenden Projekte auf der user_id in der Lieferanten-Tabelle basiert zeigen können? Wenn dies im Umfang enthalten sein muss, wie überprüfe ich dann die suppliers.user_id im Umfang?

+0

Entschuldigung. Ich verstehe deine Frage nicht. Funktioniert das wie Code? wenn jetzt. Was ist das Problem. Könnten Sie uns das Ergebnis der Abfrage zeigen? –

+0

Ja, ich habe die Modellbeziehungen eingerichtet, aber ich versuche herauszufinden, was ich in die 'show?' Pandit-Richtlinie einfügen soll, damit es nur Zugriff auf Projekte erlaubt, die eine Invite – HoosierCoder

Antwort

0

Wie kann ich nur die entsprechenden Projekte basierend auf der user_id in der Tabelle Lieferanten anzeigen?

The has_many :through Association

Invites.rb 
    belongs_to :supplier 
    belongs_to :project 

Projektmodell hat viele Lieferanten

Project.rb 
    has_many :invites 
    has_many :suppliers, :through => :invites 

Anbietermodell viele Projekte

Supplier.rb 
    has_many :invites 
    has_many :projects, :through => :invites 

Finden Sie den Lieferanten hat und verwenden Sie die has_many :projects, :through => :invites

Supplier.find_by(user_id: user.id).projects 
+0

Based haben auf Ihrem Hinweis, hat es funktioniert mit: 'Supplier.find_by (user_id: user.id) .projects.pluck (" projects.id "). project.id' in der 'show?' - Richtlinie. Denkst du, dass das DRY genug ist? Wenn ja, können Sie es in Ihre Antwort aufnehmen, und ich werde akzeptieren .. – HoosierCoder

+0

@HoosierCoder Ja, aber wenn Sie mehr Hilfe benötigen, können Sie überprüfen codereview Stack Exchange Forum –

+0

@HoosierCoder vielen Dank. Viel Glück mit deiner App! –

Verwandte Themen