ruby-on-rails - 从 Ruby 类中调用方法? (或者这是 Rails 的魔法)

标签 ruby-on-rails ruby callback

我是 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/

相关文章:

asp.net - 在 Chrome ajax 异步回发端不起作用

ruby-on-rails - 从 find 中返回唯一的年份

ruby-on-rails - 遍历 has_many 时访问关联的连接模型 :through association

ruby - apache、phusion 乘客和内存使用情况

ruby-on-rails - 如何使用ruby查询数据库?

c - 在 C 为什么函数指针更适合函数回调?

ruby-on-rails - 具有多个对象和整数键的 Rails 4 强参数

ruby-on-rails - rails : Rails_best_practices - command not found when run on a rails model

ruby - 如何通过 docker-compose run 使用 Docker 访问 Sinatra 端口

Javascript 回调 - 为什么这些回调以不同的顺序处理?