1

「場所」を承認しようとしています。URL のパラメーターはロケーション ID ではなく、「url_alias」と呼ばれる別のフィールドです。したがって、LocationsController で適切な場所を検索する場合、params[:id] は使用しません。

@location = Location.find_by(url_alias: params[:url_alias])

ルートは次のようになります。

resources :locations, param: :url_alias

ability.rb モデルでは、次の行を使用します。

can :read, Location, url_alias: "TestURL"

ここでの問題は、CanCanCan が url_alias フィールドで承認しようとした情報を使用しないことです。必要なすべての場所を表示できます。「url_alias」を「qwert」などのランダムな値に置き換えると、フィールドが存在しないというエラーも発生しません。

コントローラーで params[:id] をランダムな値に設定することで、すべてが再び期待どおりに機能し、cancancan が url_alias などによって承認されます。単に params[:id] をCanCanCan を機能させるためのランダムな値。それで、誰かがより良い解決策のアイデアを持っていますか? 前もって感謝します!

4

0 に答える 0