2016-11-04 4 views
1

名前空間のリソースで専門家を使用する方法を理解しようとしています。Rails 5、名前空間を持つ専門家

私は、他の人からは、これに問題があると言っている多くのSOの投稿を読んだことがありますが、専門家の宝石発行トラッカーに関するこれまでのディスカッションはありません。問題の追跡者は、解決策が何であるかについては明確ではないので、私は立ち往生しています。

私は、ネストされたリソースの名前空間であるStanceというフォルダを持っています。その1つは概要と呼ばれます。

model.rbファイルが呼び出されます。

class Stance::Overview < ApplicationRecord 

コントローラが呼び出されます。

class Stance::OverviewsController < ApplicationController 

と呼ばれているDB内のテーブル:私のアプリで

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

/私はさまざまな方法でポリシーを作成しようとしましたが、ビューでポリシーを参照する際にはさまざまな試みがありました。私は動作する方法を見つけることができません。

私は、overview_policy.rbと呼ばれるファイルにスタンスというフォルダを作ってみた:

(1つのスタンス::概要を持っている)私の組織ビューで
class Stance::OverviewPolicy < ApplicationPolicy 

、i)は、ローカル変数を定義します:

<% 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 %> 

私が変動0を見つけることができませんこれは動作します。私が試したことはすべて、SOの投稿に基づいた推測であり、そのほとんどは専門家問題追跡者の会話に先行しています。

エラーメッセージは表示されませんが、コンテンツは必要なときにレンダリングされません。

誰もが名前空間で専門家を使用できるようにするために何が必要なのか分かりませんか?

+0

スタンスまたはスタンスというポリシーファイルのスタンスフォルダがありますか。私はそれがすべて小文字である必要があると思う。私たちのモデルの1つと同様のセットアップがあり、うまくいきます。しかし、唯一の権限はコントローラにあります。 – Scott

+0

私は、ポリシーフォルダー内に「スタンス」と呼ばれる小文字のフォルダーを持っています。どのようにあなたのクラスにポリシーの名前をつけますか?私はこれをやっています: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]を書き込むと、表示されますか? app/policies/stance/overview_policy.rbにあります。

関連する問題