Rails 4 - Pundit - Richtlinie erstellen

Ich versuche herauszufinden, wie ich pundit in meiner Rails 4-App verwende.

Ich habe eine Profilansicht, in der ich einen Link zum Erstellen eines neuen Projekts anzeigen möchte, sofern dies von Experten genehmigt wurde.

ch habe jede der folgenden Formulierungen ausprobier

 <%# if policy(Project.new).create? %>
                            <%# if policy(Project).create? %>
                            <%# if policy(@project).create? %>
                            <%# if policy(Projects).create? %>
                            <% if policy(project).create? %>


                             <%= link_to 'CREATE A, PROJECT', new_project_path, :class=>"btn btn-info"  %>
                            <% end %> 

Die Zuordnung zwischen Projekt und Profil lautet:

Projek

belongs_to :profile

Profi

has_many :projects, dependent: :destroy

Meine Projektrichtlinie hat:

def new?
        true
        # create?
    end

    def create?
        true

    end

wenn ich versuche, diese Zeile in der Profilansicht zu verwenden:<% if policy(Project).create? %>

Ich erhalte einen Fehler, der besagt:

Falsche Anzahl von Argumenten (2 angegeben, 0 erwartet)

wenn ich versuche, diese Zeile in der Profilansicht zu verwenden:<% if policy(@project).create? %>

Ich erhalte einen Fehler, der besagt:

Falsche Anzahl von Argumenten (2 angegeben, 0 erwartet)

wenn ich versuche, diese Zeile in der Profilansicht zu verwenden:<% if policy(Projects).create? %>

Ich erhalte einen Fehler, der besagt:

s ist nicht möglich, die Richtlinie von nil @ zu finde

wenn ich versuche, diese Zeile in der Profilansicht zu verwenden:<% if policy(project).create? %>

Ich erhalte einen Fehler, der besagt:

undefined lokale Variable oder Methode `project 'für <#: 0x007faf5255d468> Meinten Sie? Projekt-UR

Muss ich etwas Besonderes tun, um die Projektberechtigung zu testen, wenn sich die Ansichtsseite in einem anderen Modell befindet (z. B. Profil, Testberechtigung für dieses Profil, um festzustellen, ob ein Projekt erstellt werden kann)? Ich stecke fest und rate, wie ich dieses Problem lösen kann.

In meinem Projektcontroller habe ich eine Erstellungsmethode mit:

def create
    @project = Project.new(project_params)
    @project.profile = current_user.profile

    respond_to do |format|
      if @project.save
        format.html { redirect_to @project }
        format.json { render :show, status: :created, location: @project }
      else
        format.html { render :new }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end

Der Initialisierer für die Richtlinie:

class ProjectPolicy < ApplicationPolicy

    attr_reader :user, :record

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage