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