2016-08-24 20 views
1

私はRails 4アプリケーションでPunditを使う方法を学びたいと思っています。Rails 4 - pundit - ユーザ権限を確認する文を書く方法

私は潜在的な使用ポリシーを持っています。潜在的な使用表には、user_idという属性があります。

インスタンスを作成したユーザーにインスタンスの更新を許可します。私はどのように更新アクションを動作させるかを理解しようとしています。

私の現在の試みを以下に示します。

undefined method `user_id' for nil:NilClass 

私はこのメッセージを取得する理由を私は理解していない:私はこれらをしようとすると

class PotentialUsePolicy < ApplicationPolicy 

    attr_reader :user, :record 

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


    def index? 
     true if user.is_admin? 
    end 

    def show? 
     true 

    end 

    def new? 
     true 
    end 

    def create? 
     new? 
    end 

    def update? 
     if @user.id == @potential_use.user_id 

     # if user.id == potential_use.user_id 
      true 
     else 
      false 
     end 
    end 

    def destroy? 
     update? 
    end 

    def edit? 
       true 
    end 

    def potential_use 
     record 
    end 

end 

、私が言ってエラーを得続けます。コンソールを見ると、ユーザーIDを持つエントリが表示されます。私は評論家のポリシーを使用しようとせずに(ビューで見ると

p = PotentialUse.where(project_id: 26) 
    PotentialUse Load (0.5ms) SELECT "potential_uses".* FROM "potential_uses" WHERE "potential_uses"."project_id" = $1 [["project_id", 26]] 
=> #<ActiveRecord::Relation [#<PotentialUse id: 9, comment: "adsfsfdadfasdddxxddbbdd", project_id: 26, created_at: "2016-08-18 23:16:06", updated_at: "2016-08-24 01:06:00", user_id: 1, private_comment: false>]> 
2.3.0p0 :016 > 

、ページがUSER_IDによってアクセスされるユーザー名()を含め、すべての適切なコンテンツをレンダリングします。

更新私の潜在的な使用のコントローラ内のアクションがあります?

def update 
    authorize @potential_use 
    respond_to do |format| 
     if @potential_use.update(potential_use_params) 
     format.html { redirect_to @project, notice: 'Potential use was successfully updated.' } 
     format.json { render :show, status: :ok, location: @potential_use } 
     else 
     format.html { render @project } 
     format.json { render json: @potential_use.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

誰もが私が間違ってやったものを見ることができます

答えて

0

あなたのアクセサに許可オブジェクトにアクセスあなたの元に。あなたのコントローラ更新アクションで

authorize @potential_use 

と呼ばれています。更新?メソッドは、次のようになります。

def update? 
    user.id == record.user_id 
end 
+0

しかし、私のポリシーでは潜在的な使用と呼ばれるメソッドがレコードとして定義されているとします。だから私の試み(あなたのコメント)はあなたと同じだと思う。 – Mel

+0

また、私はあなたの提案を試みましたが、このエラーを返します:#のための未定義のメソッド 'user_id ' – Mel

+0

この質問はごめんなさい不適切なのですが、あなたは@potential_use変数を割り当てましたか?たぶんbefore_actionなどでですか? –

関連する問題