我是 Ruby 新手,正在学习一些教程/截屏视频。我已经到达他们正在讨论的部分before_filter
回调,它使用了一些对我来说有点奇怪的语法。我不知道这是否是 ruby 的一个功能,或者它是否是一些 Rails 的魔法,希望这里有人可以指导我或通过手册为我指明正确的方向
这是我正在观看的截屏视频中的代码片段
class MachinesController < ApplicationController
#...
before_filter :login_required, :only => [:report]
#...
def index
#etc...
end
def login_required
#etc...
end
end
在 Rails 的背景下,我明白before_filter
是一个将触发的回调login_required
方法当report
行动被称为。但是,我不清楚红宝石的上下文中它是什么。在其他语言中,类通常包含在大括号内定义的方法、属性、类变量和常量。
然而,这看起来像是类内部的函数调用,并且一些实验表明您可以将代码放入类定义中并在程序运行时调用它。它是否正确?如果是这样,对于内联到这样的类中的代码是否有特殊的上下文规则? (也就是说,rails 中的 before_filter 函数知道它是从哪个类调用的)如果不知道,rails 在这里有什么魔力?
before_filter
实际上不是回调。它是的类方法ActiveRecord::Base http://apidock.com/rails/ActionController/Filters/ClassMethods当您调用它时,它会设置一个回调。所以在这个例子中:
before_filter :login_required, :only => [:report]
当类加载时,调用该方法,并添加:login_required
到过滤器链report
method.
这些类型的调用的约定是删除括号,但如果您这样做,它会很好地工作(并且更容易识别为方法调用):
before_filter(:login_required, :only => [:report])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)