Я пытаюсь выяснить, как использовать pundit в моем приложении Rails 4.Rails 4 - Pundit - создать политику
У меня есть профиль, в котором я хочу отобразить ссылку для создания нового проекта с учетом разрешения на мандатирование.
Я попытался каждый из следующих составов:
<%# 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 %>
Связь между проектом и профилем является:
Проект
belongs_to :profile
Профиль
has_many :projects, dependent: :destroy
Моя политика Проект имеет:
def new?
true
# create?
end
def create?
true
end
, когда я пытаюсь использовать эту строку в виде профиля: <% if policy(Project).create? %>
Я получаю сообщение об ошибке, которая говорит:
неверное число аргументов (данных 2, ожидается, 0)
, когда я пытаюсь использовать эту строку в виде профиля: <% if policy(@project).create? %>
Я получаю сообщение об ошибке, которая говорит:
неверное число аргументов (данных 2, как ожидается 0)
, когда я пытаюсь использовать эту строку в виде профиля: <% if policy(Projects).create? %>
I получите сообщение об ошибке:
не найдена политика nil
когда я попробовать использовать эту строку в виде профиля: <% if policy(project).create? %>
Я получаю сообщение об ошибке, которая говорит:
неопределенные локальные переменные или метод `проект» для < #: 0x007faf5255d468> Сделал ты имеешь в виду? project_url
Есть ли что-то особенное, что нужно сделать, чтобы проверить разрешение проекта, если страница вида находится в другой модели (например, профиль, разрешение тестирования для этого профиля, может ли это создать проект)? Я застрял и догадывался, как решить эту проблему.
В моем контроллере проектов, у меня есть метод создания с:
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
инициализатора для политики:
class ProjectPolicy < ApplicationPolicy
attr_reader :user, :record
def initialize(user, record)
@user = user
@record = record
end
Что находится в вашем методе 'def create'? –
@KieranAndrews - я добавил действие create к сообщению – Mel
Какой файл просмотра является вашим 'link_to 'CREATE A PROJECT''? –