Ruby on rails 3 cancan当前的能力方法是否需要每个can方法?
我将Rails 3.0.9与cancan 1.6.7和设备1.4.8一起使用 我很怀疑,这个罐子是吗不能/不能?方法调用当前的能力方法,因为 我刚刚在application controller中编写了当前能力方法,它覆盖了cancan的当前能力方法 在应用程序中\u controller.rbRuby on rails 3 cancan当前的能力方法是否需要每个can方法?,ruby-on-rails-3,cancan,Ruby On Rails 3,Cancan,我将Rails 3.0.9与cancan 1.6.7和设备1.4.8一起使用 我很怀疑,这个罐子是吗不能/不能?方法调用当前的能力方法,因为 我刚刚在application controller中编写了当前能力方法,它覆盖了cancan的当前能力方法 在应用程序中\u controller.rb def current_ability if current_user.kind_of(User) @current_ability ||= UserAbility.
def current_ability
if current_user.kind_of(User)
@current_ability ||= UserAbility.new(current_user)
else
@current_ability ||= AdminAbility.new(current_admin)
end
end
发现,此方法在每个页面请求中被调用44次
登录后加载的索引页包含35个使用can?加载的菜单项?使用can加载3个操作的方法和内容?方法
为什么当前的能力方法被调用了44次?是。每一罐?不能授权!调用当前的能力方法请参见:
此外,我也不会担心对当前_能力的44次调用。每个请求只创建一个能力对象,因为您在控制器上使用了一个实例变量,带有| |=运算符,即记忆。这不是一个重大的性能打击
例如,让我们做一个快速基准测试,以获取相同的缓存对象100000次
需要基准
def缓存的_对象
@foo | |=字符串。新的'foobar'
终止
缓存的_object.object_id.to_s16=>3ffc5cc53cb0
缓存的_object.object_id.to_s16=>3ffc5cc53cb0返回相同的对象
Benchmark.bm7 do|b|
b、 报表缓存对象{100000.times{cached_Object}
终止
用户系统总真实值
缓存对象0.010000 0.0000000.010000 0.017291
对。每一罐?不能授权!调用当前的能力方法请参见:
此外,我也不会担心对当前_能力的44次调用。每个请求只创建一个能力对象,因为您在控制器上使用了一个实例变量,带有| |=运算符,即记忆。这不是一个重大的性能打击
例如,让我们做一个快速基准测试,以获取相同的缓存对象100000次
需要基准
def缓存的_对象
@foo | |=字符串。新的'foobar'
终止
缓存的_object.object_id.to_s16=>3ffc5cc53cb0
缓存的_object.object_id.to_s16=>3ffc5cc53cb0返回相同的对象
Benchmark.bm7 do|b|
b、 报表缓存对象{100000.times{cached_Object}
终止
用户系统总真实值
缓存对象0.010000 0.0000000.010000 0.017291
谢谢你的简短解释。谢谢你的简短解释。