【问题标题】:Refactoring before_filters in Controller在 Controller 中重构 before_filters
【发布时间】:2009-01-02 21:01:01
【问题描述】:

我正在开发一个 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]

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

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

【问题讨论】:

    标签: ruby-on-rails model-view-controller aasm


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多