私は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
誰もが私が間違ってやったものを見ることができます
しかし、私のポリシーでは潜在的な使用と呼ばれるメソッドがレコードとして定義されているとします。だから私の試み(あなたのコメント)はあなたと同じだと思う。 – Mel
また、私はあなたの提案を試みましたが、このエラーを返します:#のための未定義のメソッド 'user_id ' –
Mel
この質問はごめんなさい不適切なのですが、あなたは@potential_use変数を割り当てましたか?たぶんbefore_actionなどでですか? –