0

我正在开发一个 Rails 应用程序,该应用程序在 users_controller 中有一大堆过滤器,这些过滤器查找由 Acts as State Machine 提供的用户的有状态角色。它们看起来像这样:

class UsersController < ApplicationController

before_filter :not_logged_in_required, :only => [:new, :create]
before_filter :find_user_or_current_user, :only => [:edit, :update]
before_filter :find_user, :only => [:suspend, :unsuspend, :destroy, :purge]
before_filter :admin_required, :only => [:suspend, :unsuspend, :destroy, :purge]
before_filter :check_administrator_role, :only [:index, :suspend, :destroy, :purge]

通过对用户控制器控制的每个操作的所有这些状态检查,性能成为一个问题,对用户列的 SQL 查询在我的机器上花费了 5 毫秒以上。

我只是假设所有这些过滤器都在拖动性能中起作用,我想知道如何最好地重构这些过滤器以改善从数据库中读取。

4

1 回答 1

1

将许多特权内容抽象到您的用户模型中(可能是标志?完整的特权模型和链接表可能会过大,但也许不会)。将当前登录的用户 ID(可能还有其他一些常用的东西)存储到会话中。留下一个 before_filter,称为:auth,它执行 aUser.find(session[:user_id])并将一些众所周知的类变量可能@loggedinuser设置为 User 对象。然后你@loggedinuser对权限进行查找。

于 2009-01-04T04:20:22.693 回答