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

2024-03-29

我是 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(使用前将#替换为@)

从 Ruby 类中调用方法? (或者这是 Rails 的魔法) 的相关文章

  • 为什么这个 Ruby 方法返回“空值表达式”错误?

    我有这个简单的方法 def is palindrome sentence raise ArgumentError new expected string unless sentence is a String safe sentence s
  • Mongoid 命名范围比较同一文档中的两个时间字段

    我需要在 Mongoid 中创建一个命名范围来比较同一文档中的两个时间字段 例如 scope foo where gt updated at gt gt checked at 这显然不会像它对待的那样起作用 checked at作为一个符号
  • 如何在 Ruby on Rails 中不使用 eval 将字符串转换为哈希值? [复制]

    这个问题在这里已经有答案了 这里是string需要转换成hash status gt label gt Status collection gt return misc definitions project status 我们不能使用ev
  • 创建 OpenCV 的 mouseCallback 函数的基于类的实现时遇到问题

    正如标题所示 我在基于类的 C 结构中实现 OpenCV 的 mouseCallback 函数时遇到了一些麻烦 请允许我解释一下 我定义了一个名为 BriskMatching 的类 在其中创建了一个名为 mouseCallback 的成员函
  • gets、gets.chomp 和 gets.chomp 之间的区别!?

    这三者有什么区别 gets 它得到一行带有 n gets chomp 它得到一行 但删除 n 那是对的吗 关于什么gets chomp gets http www ruby doc org core 2 1 0 Kernel html me
  • 自动测试无限循环

    我在 Rails 项目中使用自动测试时遇到了一个问题 即当测试失败时 即 我修改了测试文件并且自动测试自动运行测试 自动测试会不断尝试运行测试 当然每次都会失败 因为文件尚未被修改 而不是等到文件再次保存 当咆哮通知打开时 当我试图修复代码
  • C++ 类成员函数和来自 C API 的回调

    我正在尝试学习如何称呼它write data 函数从funmain 类中的函数如下面的代码所示 我知道如果我只列出这两个函数而不将其放入类中 该程序就可以工作 curl easy setopt curl CURLOPT WRITEFUNCT
  • 向 ReduxReducer 添加回调

    是否有任何错误 反模式 就 React Redux 中的思考 中添加了一个回调action data转化为行动 reducer ACTION FOR REDUCER var x 123 if action data callback act
  • Ruby 中多维数组的帮助

    我有以下代码将字符串拆分为 3 个字节的组 str hello ix 0 iy 0 bytes tby str each byte do c if iy 3 iy 0 bytes ix tby each index do i bytes i
  • Rails 中的 PDF 导出

    我需要将包含一些图表的 HTML 页面导出为 PDF 有哪些好的 gem 可以做到这一点 PDFKit http railscasts com episodes 220 pdfkit http railscasts com episodes
  • 如何在 Rails 3.2.1 版本中注释 Rails 模型

    我正在尝试遵循一些在线教程来在 Rails 中注释我的模型 然而 似乎所有教程都在谈论过时的注释版本或不正确的安装 这真是一团糟 到目前为止我已经尝试过以下方法 1 在 Gemfile 中添加此内容 gem annotate 2 4 0 2
  • 当一组工作人员完成时如何执行 Sidekiq 回调

    假设我有一个 Sidekiq 任务将产品处理到我的数据库 每个产品都按商店分组 因此我的代码的一个过于简化的示例将是这样的 stores each do store store products each do product Produc
  • Rails:format.js 或 format.json,或两者?

    可能很明显 但我仍然缺乏基本知识 那么在控制器内部 两者都可以使用 还是总是 Javascript 所以两者是相同的 json and js是两种不同类型的响应 它们在 Rails 中被定义为不同的 MIME 类型 Mime Type re
  • 多态控制器和调用对象

    我的地址具有多态关系 可以由成员或依赖者拥有 一切看起来都很棒 直到我意识到除非我遗漏了一些东西 否则我不知道创建它的对象是什么类型 有没有办法告诉路由文件包含对象的类型 Models class Member lt ActiveRecor
  • 使用 Fetch 和 FormData API 上传多个文件

    我正在尝试使用本机Fetch https developer mozilla org en US docs Web API Fetch API and FormData https developer mozilla org en US d
  • 通过推送通知唤醒

    Suppose 有一些对象 例如 一个数组a 和依赖于对象的条件 例如 a empty 当前线程以外的某些线程可以操作该对象 a 因此条件评估值的真实性会随着时间的推移而变化 如何让当前线程在代码中的某个时刻休眠 并在条件满足时通过推送通知
  • 如何向 Time.now 添加两周?

    如何在 Ruby 中向当前 Time now 添加两周 我有一个使用 DataMapper 的小型 Sinatra 项目 在保存之前 我有一个字段填充了当前时间加上两周 但未按需要工作 任何帮助是极大的赞赏 我收到以下错误 NoMethod
  • 资产管道弃用警告 tsort.rb:226

    我的 Rails 4 2 在开发中运行良好 但在生产环境中我收到以下警告 DEPRECATION WARNING The configuration option config serve static assets has been re
  • Ruby on Rails REST 设计问题 - 在账户之间转账

    我有一个 Account 类 想要实现转账屏幕以允许用户在 2 个账户之间转账 我将如何实现这种 RESTful 方式 我有标准帐户和休息操作 那很好 但我该如何实现转移呢 通常我只会向帐户控制器和相应的视图添加一个名为 transfer
  • Ruby 枚举器中的“break”与“raise StopIteration”

    如果我使用 Ruby Enumerators 来实现生成器和过滤器 generator Enumerator new do y x 0 loop do y lt lt x x 1 break if x gt CUTOFF end end l

随机推荐

  • Azure ARM 模板嵌套模板部署不会更新资源\无法启动

    我有以下 ARM 模板结构 Parent Template Nested Template 1 Nested Template 6 所以我只有 2 层模板 父级模板和嵌套模板 假设我将父级部署到一个空资源组 一切正常 之后 我删除其中一项资
  • iOS - 通过区域设置更改 UIDatePicker 的语言

    我正在用 Herbrew 语言创建应用程序 iPhone 的语言可以是任何语言 但我的应用程序只能在 Herbrew 中运行 在 iOS 的 UIDatePicker 中 我们有一个属性 locale 它将更改它显示的语言 但在 iOS5
  • Java Swing 保存和加载工作区/设置

    我有一个 Java Swing 应用程序 其中包含一堆框架 而这些框架又主要包含显示大量数据的表格 由于在启动时安排所有窗口和表格总是很麻烦且耗时 因此我想实现 工作区 功能 以便用户可以保存首选项设置并在启动时选择自动将存储的工作区加载到
  • 找到未合并的 Git 分支?

    我有一个包含许多分支的 Git 存储库 其中一些已经合并 一些还没有 由于分支数量相当多 如何判断哪些分支尚未合并 我想避免必须进行 章鱼 合并和重新合并已经合并的分支 尝试这个 git branch merged master 它按照锡上
  • 为什么我的标签栏按钮无法在 iPad 上自动调整大小?

    我正在构建一个通用的 iOS 应用程序 iPad 版本使用 SplitViewController 在弹出视图中 我有一个带有两个按钮的 UITabBarController 当它在 iPhone 上运行时 TabBar 按钮正确拉伸以填充
  • MVC 3 中如何处理会话超时

    我遇到了频繁的会话超时问题 我想编写一个可以在每个控制器上使用的通用过滤器 过滤器应该重定向用户登录 并在登录后返回到用户发送最后一个请求的位置 你可以尝试这样的事情 public class SessionExpireAttribute
  • 错误 (407)“需要代理身份验证。”

    我有一个要求 比如 我想从 winforms 访问一个 url 登录页面 即 Web 我必须将凭据传递给该网址 并且响应应该是经过身份验证的网页 标记 的内容 我已经编写了一个函数 它将请求 url 并返回响应 但我收到错误代码 407 需
  • git Reset 文件和 git checkout 文件有什么区别?

    为什么 git 允许我重置文件 我以为我明白了reset 从某种意义上说 它正在移动头部 显然我错了 So git reset sha file似乎做同样的事情git checkout sha file 除了我看到的file在索引和工作目录
  • Kestrel 错误:地址已在使用中(dotnet 核心)

    摘要 它的工作原理是dotnet run 但它不起作用dotnet myappname dll 我的 Linux 技能有限 但我正在尝试按照书本进行操作 这样我就不会混淆事情 以下本教程 http www hanselman com blo
  • 在 iOS 14 中,Interface Builder 中设置的 UITextField backgroundColor 在运行时为零

    我有一个应用程序可以在 iOS 11 13 上正常运行 但是当我在 iOS 14 中运行它时 有几个其中的文本字段用零渲染 因此透明 背景颜色即使背景颜色在 Interface Builder 中明确设置为白色 我在代码中看不到任何使用可能
  • 如何在 PySide2 应用程序中嵌入 matplotlib 画布

    我正在尝试将 matplotlib 画布嵌入到 PySide2 应用程序中 我尝试使用这个例子 https matplotlib org examples user interfaces embedding in qt5 html http
  • 使用 bash 计算文件中每个单词的出现次数

    我想计算文件中每个单词的出现次数 但结果是错误的 bin bash usage count sh file declare a dict for word in cat 1 do if dict word then dict word 0
  • 在 Google 表格中两个数字之间的列中填写数字

    所以我试图填写 Google 表格中两个单元格之间的数字 我从 270 开始 在列中出现几个不确定且变化的空单元格后 我需要达到 180 我需要均匀地填充它们之间的单元格 但如何呢 如果您想将这些值粘贴到同一列中 您需要执行以下操作 那么公
  • Prolog - 递归列表构建

    对于我正在编写的程序 我需要创建一个列表列表 其中包含代表乘积的数字对和两个给定数字的总和 现在我有一个函数 我可以指定将列表添加到列表中的次数 稍后将使用完整功能进行扩展 这是我所拥有的 s1 0 X s1 Q X N is Q 1 mu
  • NFC 广播接收器问题

    我希望我的应用程序仅在激活时侦听 nfc 标签 为此 我尝试如下注册一个 nfc 侦听器 但没有成功 IntentFilter filter new IntentFilter android nfc action TECH DISCOVER
  • 使用查询生成器或 Eloquent 进行带有附加条件的 JOIN

    我正在尝试使用 Laravel 查询生成器的 JOIN 查询添加条件
  • Android 上的 Libgdx app.exit() 未关闭应用程序

    在我用 libGDX 开发的 Android 应用程序中 我使用Gdx app exit 当用户尝试退出游戏时 这会关闭游戏 但是当用户重新启动应用程序时 所有Textures被扰乱 超出了使用该应用程序的范围 我注意到 如果我从任务管理器
  • Haskell 中的垃圾 thunk 是否存在固有的“携带成本”?

    在运行 GHC 编译的程序时 我经常看到 GC 上花费了大量的周期 这些数字往往比我的 JVM 经验所建议的要高出一个数量级 特别是 GC 复制 的字节数似乎比我正在计算的数据量大得多 非语言和严格语言之间的这种差异是根本性的吗 tl dr
  • Cassandra 和 Tombstones:创建行、删除行、重新创建行 = 性能?

    有人可以解释一下 以下过程对墓碑有什么影响 1 使用键 1 创建 行 字段 用户 密码 日期 2 删除键为 1 的 行 3 使用键 1 创建 行 字段 用户 密码 登录计数 该序列在一个线程中按顺序执行 因此这种情况以相对较高的 速度 发生
  • 从 Ruby 类中调用方法? (或者这是 Rails 的魔法)

    我是 Ruby 新手 正在学习一些教程 截屏视频 我已经到达他们正在讨论的部分before filter回调 它使用了一些对我来说有点奇怪的语法 我不知道这是否是 ruby 的一个功能 或者它是否是一些 Rails 的魔法 希望这里有人可以