我正在考虑在Rails应用程序中提高控制器操作的性能。在查看了一些性能计数器之后,我现在知道问题在于我们在整个模型代码中有多个授权检查的方式。他们看起来像:
Class Company < ActiveRecord::Base
def member?(user)
#look up a table to check for membership if @is_member does not exist else return @is_member
end
def employee?(user)
#look up a table to check for membership
end
def manager?(user)
#look up a table to check for membership
end
end
class SomeModel < ActiveRecord::Base
def some_method
do_something if current_company.employee?(current_user)
end
end
由于有很多地方我们进行类似于some_method的检查,因此请求通常最终会多次访问数据库。这似乎是一种浪费的做事方式。加快此类授权检查的方法有哪些? (假设缓存是这里的方式)
答案 0 :(得分:0)
由于授权很少变更,并且您似乎有一个有限的会员资格列表,您可以:
这样,您只能在保存角色时计算一次会员资格。其他一切都是简单/快速的列查找。