红宝石类声明问题

nev*_*ame 3 ruby ruby-on-rails

你可以在红宝石中:

class ApplicationController < ActionController::Base
  before_filter :require_login
end
Run Code Online (Sandbox Code Playgroud)

我只是想知道什么是before_filter?它是ActionController :: Base的一个方法吗?

如果我创建ApplicationController的对象会发生什么?before_filter方法会运行吗?

谢谢!

Geo*_*tte 8

是的,before_filter是ActionController :: Base上的一个方法.指定的任何内容都before_filter将在调用操作之前运行.

API文档:http://api.rubyonrails.org/classes/ActionController/Filters/ClassMethods.html#M000316

编辑:

直接写入类时,在将类加载到解释器中时执行该代码.

将其键入IRB:

>> class Hello
>> p "hello"
>> end
"hello"
Run Code Online (Sandbox Code Playgroud)

所以在你提到的情况下,ruby会看到before_filter方法,并试图找到它.它开始查看它的类,然后它进入父类和父类的父类,依此类推,直到它到达Object.在这种情况下,它将转到ActionController :: Base类before_filter,然后查找链接到类,模块和对象.

>> ActionController::Base.class
=> Class
>> ActionController::Base.class.superclass
=> Module
>> ActionController::Base.class.superclass.superclass
=> Object
>> ActionController::Base.class.superclass.superclass.superclass
Run Code Online (Sandbox Code Playgroud)

如果您正在阅读,我强烈推荐使用MetaProgramming Ruby,它可以更好地解释对象模型.