ここで提案されているように、リクエストデータをアビリティモデルに渡そうとしています:
class ApplicationController < ActionController::Base
#...
private
def current_ability
@current_ability ||= Ability.new(current_user, request.remote_ip)
end
end
そしてここ:
class Ability
include CanCan::Ability
def initialize(user, ip_address=nil)
can :create, Comment unless BLACKLIST_IPS.include? ip_address
end
end
参照: https://github.com/ryanb/cancan/wiki/Accessing-request-data
ただし、CancanAdapter で ActiveAdmin を使用しており、次の方法で別の初期化呼び出しを使用しています。
def initialize_cancan_ability
klass = resource.namespace.cancan_ability_class
klass = klass.constantize if klass.is_a? String
klass.new user
end
参照: https://github.com/activeadmin/activeadmin/blob/master/lib/active_admin/cancan_adapter.rb
initialize_cancan_ability
では、例のような要求データを渡すことができるように、どのように/どこで再定義できcurrent_ability
ますか?
基本的に、最後の行を次のように置き換えたいと思っています。
klass.new user, request
ありがとう。