我正在试图弄清楚如何将pundit用于我的命名空间资源。
我已经阅读了很多来自其他人的SO帖子,说他们有这方面的问题,但那些早于对专家宝石问题跟踪器的讨论。问题跟踪器不清楚解决方案是什么 - 所以我被卡住了。
我有一个名为Stance的文件夹,它是嵌套资源的命名空间,其中一个名为overview。
调用model.rb文件:
class Stance::Overview < ApplicationRecord
控制器被调用:
class Stance::OverviewsController < ApplicationController
db中的表名为:
create_table "stance_overviews", force: :cascade do |t|
在我的app / policies文件夹中,我尝试了各种制定策略的方法,然后尝试在视图中引用策略。我找不到一种有效的方法。
我尝试使用名为overview_policy.rb的文件创建一个名为Stance的文件夹,其中包含:
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 %>
我无法找到有效的变体。我尝试的所有内容都是基于SO帖子的猜测,其中大部分都是在专家问题跟踪器上的对话之前。
我没有收到错误消息,但内容无法呈现。
任何人都可以看到我需要做些什么才能将pundit与命名空间资源一起使用?
答案 0 :(得分:0)
当我遇到命名空间问题时,我使用Pundit.policy()。
对于您的课程,我认为应该在视图中使用Pundit.policy(current_user,[:stance, :overview]).show?
并在控制器中使用authorize [:stance, @overview]
。
Pundit.policy(current_user,[:stance, :overview]).show?
会找到节目吗?在app / policies / stance / overview_policy.rb。
如果你在控制器上的show上写authorize [:stance, @overview]
,它会找到show吗?在app / policies / stance / overview_policy.rb。