我是 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
是一个回调,当调用 report
操作时,它将触发 login_required
方法。但是,我不清楚 ruby 的上下文中它是什么。在其他语言中,类通常包含在大括号内定义的方法、属性、类变量和常量。
但是,这看起来像是类内部的函数调用,并且一些实验表明您可以将代码放入类定义中并在程序运行时调用它。它是否正确?如果是这样,对于内联到这样的类中的代码是否有特殊的上下文规则? (也就是说,rails 中的 before_filter 函数知道它是从哪个类调用的)如果不知道,rails 在这里有什么魔力?
最佳答案
before_filter
实际上并不是回调。这是class method of ActiveRecord::Base
当您调用它时会设置回调。所以在这个例子中:
before_filter :login_required, :only => [:report]
加载类时,会调用该方法,并将 :login_required
添加到 report
方法的过滤器链中。
这些类型的调用的约定是删除括号,但如果您这样做,它会很好地工作(并且更容易识别为方法调用):
before_filter(:login_required, :only => [:report])
关于ruby-on-rails - 从 Ruby 类中调用方法? (或者这是 Rails 的魔法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2084001/