gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:29:28 25 4
gpt4 key购买 nike

我是 Ruby 的新手,正在学习一些教程/截屏视频。我已经到达他们讨论 before_filter 回调的部分,它使用了一些对我来说有点奇怪的语法。我不知道它是否是 ruby​​ 的一个特性,或者它是否是一些 rails 魔法,并且希望这里的人可以让我直截了当或指出我正确的方向 w/r/t 手册

这是我正在观看的截屏视频中的代码片段

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com