2016-11-04 2 views
1

Я пытаюсь понять, как использовать брандмауэр с моими ресурсами, расположенными по имени.Rails 5, Pundit с ресурсами, расположенными по имени

Я читал много сообщений SO от других, говорящих, что у них есть проблемы с этим, но те обсуждения, которые обсуждались в журнале о проблемах с драгоценными камнями. Трекер проблем не знает, что такое решение - так что я застрял.

У меня есть папка под названием Stance, которая является пространством имен для вложенных ресурсов, один из которых называется обзором.

model.rb файл называется:

class Stance::Overview < ApplicationRecord 

Контроллер называется:

class Stance::OverviewsController < ApplicationController 

таблица в БД называется:

create_table "stance_overviews", force: :cascade do |t| 

В моем приложении/политики, я пробовал различные способы создания политики, с различными попытками затем ссылаться на политику в представлениях. Я не могу найти способ, который работает.

Я попытался сделать папку Stance с файлом под названием overview_policy.rb с:

class Stance::OverviewPolicy < ApplicationPolicy 

С моей точки зрения организации (которая имеет одну позицию :: Обзор), я определить локальную переменную) :

<% if current_user.organisation_id != @organisation.id %> 

    <%= render 'stance/overviews/internal', overview: @organisation.overview %> 
<% else %> 
    <%= render 'stance/overviews/external', overview: @organisation.overview %> 
<% end %> 

Тогда в представлении, я пытаюсь:

<% if policy(overview).show? %> 

<p><%= overview.explanation %></p> 

<% end %> 

Я не могу найти вариации O Это работает. Все, что я пробовал, - это предположение, основанное на сообщениях SO, большинство из которых предшествуют разговорам по трекеру проблемы с pundit.

У меня нет сообщения об ошибке, но контент не отображается, когда он должен.

Может ли кто-нибудь увидеть, что мне нужно сделать, чтобы иметь возможность использовать мужик с ресурсами с именами?

+0

У вас есть папка stance для файла политики с именем Stance или stance? Я думаю, что все должно быть в нижнем регистре. У нас есть аналогичная установка с одной из наших моделей, и она работает нормально. Однако в контроллере есть единственное разрешение. – Scott

+0

У меня есть папка с нижним регистром, называемая «stance» внутри моей папки политик. Как вы называете свой класс в политике? Я делаю это: class Stance :: OverviewPolicy Mel

+0

Именно так у меня есть моя настройка. Какая у вас ошибка? – Scott

ответ

0

Когда я встречаю проблему с пространством имен, я использую Pundit.policy().

Для вашего класса, я думаю, следует использовать Pundit.policy(current_user,[:stance, :overview]).show? на вид и использовать authorize [:stance, @overview] в контроллере.

Pundit.policy(current_user,[:stance, :overview]).show? найдет шоу? в приложении/policy/stance/overview_policy.rb.

если вы напишете authorize [:stance, @overview] на шоу в своем контроллере, он найдет шоу? в приложении/policy/stance/overview_policy.rb.