「場所」を承認しようとしています。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 を機能させるためのランダムな値。それで、誰かがより良い解決策のアイデアを持っていますか? 前もって感謝します!