【问题标题】:before_filter not inheriting from parent controller correctly?before_filter 没有正确地从父控制器继承?
【发布时间】:2011-01-02 03:10:04
【问题描述】:

抱歉,这可能是一个愚蠢的问题,但我无法让我的过滤器继承 Rails 3 文档所说的方式。

具体来说,我有一个通过以下方式生成的管理控制器:

rails generate controller admin

我只向管理控制器添加了一个操作,即前置过滤器和私有过滤器方法

class AdminController < ApplicationController

  before_filter require_admin_creds

  def index
  end

private

  def require_admin_creds
    unless current_user && current_user.admin?
        flash[:error] = ...
        redirect_to ....
    end
  end
end

接下来我在管理部分下创建了我的嵌套资源:

rails generate scaffold admin/model

虽然我的管理员索引确实获得了过滤器,但管理员/模型索引(或任何其他操作)却没有。我必须排除的幕后情况是什么?

提前致谢。

【问题讨论】:

  • 我很确定 before_filter 将仅适用于定义的特定控制器。你在哪里看到它应该被继承?此外,生成 admin/model 就是在 admin 命名空间中创建一个控制器……这不是继承。

标签: ruby-on-rails-3


【解决方案1】:

使 require_admin_creds 成为受保护的方法,而不是私有的。

【讨论】:

  • 还不能评论其他帖子,所以对 Sean Hills 的评论:是的 before_filters 是继承的。
  • 是的,我现在明白了。他仍然需要将 Admin::ModelController 更改为从 AdminController 继承,因为简单地将 ModelController 放入 Admin 命名空间不会创建继承。请参阅下面的答案。
【解决方案2】:

你改变了吗:

Admin::ModelController < ApplicationController 

Admin::ModelController < AdminController

?

这会创建继承,而不是将模型控制器放入 admin 命名空间。

【讨论】:

  • 谢谢伙计们,你说得对。感谢新手的帮助。
【解决方案3】:

仔细检查您的语法。你有:

before_filter require_admin_creds

但我认为应该是:

before_filter :require_admin_creds

您使用符号而不是变量/方法名称的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2017-11-12
    • 2014-09-09
    • 1970-01-01
    相关资源
    最近更新 更多