2016-07-18 10 views
0

私はRails 4アプリケーションで専門家の許可を書く方法を理解しようとしています。Rails - スコットを持つ専門家

私は記事ポリシーを持つ記事モデルを持っています。記事の方針はあります

class ArticlePolicy < ApplicationPolicy 
    attr_reader :user, :scope 

    def initialize(user, record, scope) 
     @scope = scope 
     super(user, record) 
    end 

    class Scope < Scope   
     def resolve 
     if user == article.user 
      scope.where(user_id: user_id) 
     elsif approval_required? 
      scope.where(article.state_machine.in_state?(:review)).(user.has_role?(:org_approver)) 
     else 
      article.state_machine.in_state?(:publish) 
     end 
     end 
    end 

    # TO DO - check if this is correct - I'm not sure. 
    # I now think I don't need the index actions because I have changed the action in the articles controller to look for policy scope. 
    # def index? 
    # article.state_machine.in_state?(:publish) 
    # end 

    def article 
     record 
    end 

記事・コントローラがあります。

def index 
    @articles = policy_scope(Article) 
    # query = params[:query].presence || "*" 
    # @articles = Article.search(query) 
end 

私はスコープに関連する評論家文書に従い、政策文書に示されているindexアクションがない理由を把握しようとしています私のために働く。

<% policy_scope(@user.articles).sort_by(&:created_at).in_groups_of(2) do |group| %> 

を、私はこのエラーを取得::私は(ドキュメントのように)次のことを試してみました、私は間違って行ってきたところ

undefined local variable or method `article' for #<ArticlePolicy::Scope:0x007fff08ae9f48> 

誰でも見ることができますか?

@ user.articlesが正しいかどうかはわかりません。私の構成では、記事はユーザーに属しますが、私の索引のアクションでは、すべてのユーザーに、自分のスコープで表示できる記事を表示したいと考えています。

答えて

0

これはコントローラー内の操作で試すことができます。

@articles = policy_scope(Article).all 

すべての記事を取得します。検索パラメータに基づいて記事を取得したい場合は、これを試すことができます。

@q = policy_scope(Article).search(params[:query]) 
@articles = @q.result 
+0

@Bllal - ご意見ありがとうございます。私はこれを試みたが、私はまだ上記と同じエラーメッセージが表示されます。 – Mel

+0

レコード変数にそれぞれの記事が含まれているかどうか確認できますか?私はそれが記事のレコードを含むべきだと思う。 –

+0

こんにちは@Bllal - 申し訳ありませんが、私はそれが何を意味するのか分かりません。 – Mel

0

私はあなたがエラーが、それは「記事」を認識していないことを示しているとして、明示的にスコープクラスにアクセサなどの物品を設定する必要があるかもしれないと思います。

attr_accessor :article 

などのように試してみてください。初期化メソッドで設定しているとします。おそらく記事の方法で削除することができます。

def initialize(record) 
    @article = record 
end 
+0

こんにちは@margo提案のおかげで。私はこれを試しましたが、上記のエラーメッセージと同じエラーメッセージが表示されます。 – Mel

関連する問題