2016-11-04 38 views
1

我想弄清楚如何使用我的命名空間資源的專家。Rails 5,名稱空間資源的專家

我已經從別人那裏看過很多SO帖子,說他們在這方面有問題,但是那些早於關於權威寶石問題跟蹤器的討論。問題跟蹤器不清楚解決方案是什麼 - 所以我卡住了。

我有一個名爲Stance的文件夾,它是嵌套資源的命名空間,其中一個名爲overview。

的model.rb文件名爲:

class Stance::Overview < ApplicationRecord 

控制器被稱爲:

class Stance::OverviewsController < ApplicationController 

在db的表稱爲:

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

在我的應用程序/政策文件夾中,我嘗試了制定政策的各種方式,並嘗試了各種方法,然後引用視圖中的政策。我找不到可行的方法。

我試着做了一個名爲姿態與一個名爲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 %> 

我無法找到一個變化Ø這是有效的。我嘗試過的所有內容都是基於SO帖子的猜測,其中大部分時間都在專家問題跟蹤器的對話之前。

我沒有收到錯誤消息,但內容在應該出現時沒有顯示。

任何人都可以看到我需要做什麼才能夠使用名稱空間資源的專家?

+0

您是否擁有名爲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?會找到節目嗎?在app/policies/stance/overview_policy.rb中。

如果你在你的控制器上顯示authorize [:stance, @overview],它會找到show?在app/policies/stance/overview_policy.rb中。