Rails 4 - Pundit - создать политику
Я пытаюсь понять, как использовать pundit в моем приложении 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? %>
Я получаю сообщение об ошибке:
невозможно найти политику ноль
когда я пытаюсь использовать эту строку в представлении профиля:<% if policy(project).create? %>
Я получаю сообщение об ошибке:
неопределенная локальная переменная или метод `project 'для <#: 0x007faf5255d468> Вы имели в виду? project_url
Есть ли что-то особенное, что мне нужно сделать, чтобы проверить авторизацию проекта, если страница просмотра находится в другой модели (например, профиль, тестирование авторизации для этого профиля относительно того, может ли он создать проект)? Я застрял и гадал, как решить эту проблему.
В контроллере моих проектов у меня есть метод create с:
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