53 个最热门 Ruby on Rails 面试问题及答案 (2025)

以下是 Ruby on Rails 面试问题和答案,可帮助新手和经验丰富的 Ruby 开发人员应聘者获得理想的工作。

1)解释什么是 Ruby on Rails?

  • 红宝石: 它是一种面向对象的编程语言,受到 PERL、Smalltalk、Eiffel、Ada、Basic 和 Lisp 的启发。
  • 滑轨: 它是一个用于构建 Web 应用程序的框架

2)解释一下 Ruby 中的类库是什么?

Ruby 中的类库由各种领域组成,例如数据类型,线程编程,各种领域等。

免费 PDF 下载:Ruby on Rails 面试问题与答案


3)请提及 Rails 中的命名约定是什么?

  • 变量: 声明变量时,所有字母均小写,单词之间用下划线分隔
  • 类别和模块: 模块和类使用 MixedCase 并且没有下划线;每个单词都以大写字母开头
  • 数据库表: 数据库表名应使用小写字母,单词之间有下划线,所有表名均应为复数形式,例如 invoice_items
  • 型号: 它由完整的 MixedCase 表示,并且表名始终为单数
  • 控制器: 控制器类名以复数形式表示,例如 OrdersController 将是订单表的控制器。

4)解释一下 Ruby on Rails 中的“Yield”是什么?

接收代码块的 Ruby 方法通过使用“Yield”调用来调用它。


5)解释一下 Rails 中的 ORM(对象关系模型)是什么?

Rails 中的 ORM 或对象关系模型表示您的类映射到数据库中的表,而对象直接映射到表中的行。


6) 请说出 Ruby 中 false 和 nil 之间的区别?

在 Ruby 中,false 是 FalseClass 的对象,表示布尔值,而 Nil 是 NilClass 的对象,表示不存在值。它的 object_id 为 4。

Ruby on Rails 面试问题
Ruby on Rails 面试问题


7) 请提及 Rails 的积极方面是什么?

Rails 提供了许多功能,例如

  • 元编程: Rails 使用代码生成,但对于繁重的工作,它依赖于元编程。Ruby 被认为是元编程的最佳语言之一。
  • 活动记录: 它通过 Active Record Framework 将对象保存到数据库。Rails 版本的 Active Record 识别架构中的列,并使用元编程自动将它们绑定到域对象
  • 脚手架: Rails 能够自动创建脚手架或临时代码
  • 约定优于配置: 与其他开发框架不同,如果您仔细遵循命名约定,Rails 不需要太多配置
  • 三种环境: Rails 有三个默认环境:测试、开发和生产。
  • 内置测试: 它支持称为线束和装置的代码,使测试用例能够编写和执行。

8)解释子目录 app/controllers 和 app/helpers 的作用是什么?

  • App/controllers:用户的 Web 请求由 Controller 处理。Rails 会在 controller 子目录中查找控制器类
  • App/helpers:助手子目录包含用于协助视图、模型和控制器类的任何助手类。

9)请说出字符串和符号之间的区别是什么?

它们的作用方式相同,只是行为不同,彼此相反。 不同之处在于一起使用时的 object_id、内存和进程调整。 Symbol 属于不可变对象类别,而 String 被视为可变对象。


10)解释符号与变量有何不同?

符号与变量的区别在于以下几个方面

  • 它更像是一个字符串而不是变量
  • 在 Ruby 中字符串是可变的,但符号是不可变的
  • 仅需创建符号的一个副本
  • 在 Ruby 中,符号通常用来对应枚举

11)解释一下 Ruby on Rails 中的 Rails Active Record 是什么?

Rails Active Record 是 Rails 提供的对象/关系映射 (ORM) 层。它遵循标准 ORM 模型,如下所示

  • 表格映射到类别
  • 行映射到对象
  • 列映射到对象属性

12)解释 Rails 如何实现 阿贾克斯?

Ajax 支持的网页从服务器检索新的或更改的网页,这与其他网页不同,在其他网页中您必须刷新页面才能获得最新信息。

Rails 通过以下方式触发 Ajax 操作

  • 一些引发火灾的因素: 触发器可能是用户点击链接或按钮,从而导致字段或表单中的数据发生变化
  • Web 客户端调用服务器: Java 脚本方法 XMLHttpRequest 将与触发器关联的数据发送到服务器上的操作处理程序。数据可能是复选框的 ID、整个表单或输入字段中的文本
  • 服务器进行以下处理: 服务器端操作处理程序对数据进行处理并检索 HTML 网页客户端
  • 客户端收到响应: Rails 自动生成的客户端 JavaScript 接收 HTML 片段并使用它来更新当前

13)请说明如何为主题创建控制器?

要为主题创建控制器,可以使用以下命令

C:\ruby\library> ruby​​ 脚本/生成控制器主题


14)请提及什么是 Rails Migration?

Rails Migration 使 Ruby 能够更改数据库模式,从而可以使用版本控制系统与实际代码保持同步。


15) 列出 Rails Migration 可以做什么?

Rails Migration 可以做以下事情

  • 创建表格
  • 放下桌子
  • 重命名表
  • 添加栏
  • 重命名栏
  • 更改列
  • 删除列等等

16)请提及创建迁移的命令是什么?

创建迁移命令包括

C:\ruby\application>ruby 脚本/生成迁移表名称


17)解释何时使用 self.up 和 self.down 方法?

迁移到新版本时, 自立 方法的使用 自我放松 如果需要,可以使用方法来回滚我的更改。


18)请说说Rails Controller 的作用是什么?

Rails 控制器是应用程序的逻辑中心。它促进用户、视图和模型之间的交互。它还执行其他活动,例如

  • 它能够将外部请求路由到内部操作。它处理 URL 非常好
  • 它规范辅助模块,这些模块可以扩展视图模板的功能,而无需增加代码量
  • 它调节会话;给用户一种与我们的应用程序持续交互的印象

19)请说说 Active 支持的“HashWithIndifferent”和 Ruby 的“Hash”有什么区别?

这款 哈希 Ruby 核心库中的类使用标准 “= =” 键上的比较。这意味着存储的值 符号 无法使用等效字符串检索密钥。虽然 哈希与无差别访问 将符号键和字符串键视为等效键。


20) 解释什么是跨站点请求伪造 (CSRF) 以及 Rails 如何防范它?

CSRF 是一种攻击形式,黑客会以您的名义向其他网站提交页面请求,从而造成损害或泄露您的敏感数据。为了防范 CSRF 攻击,您必须添加 “保护免受伪造” 您的 应用程序控制器。这将导致 Rails 需要 CSRF 令牌来处理请求。CSRF 令牌作为隐藏字段出现在使用 Rails 表单生成器创建的每个表单中。


21)解释一下 Rails 中的 Mixin 是什么?

Ruby 中的 Mixin 提供了多重继承的替代方案,使用 mixin 模块可以在其他类中导入。


22) 解释如何在 Ruby 中定义实例变量、全局变量和类变量?

  • Ruby 实例变量以以下形式开头: @
  • Ruby 类变量以 — 开头 @@
  • Ruby 全局变量以 — 开头 $

23)解释如何在不创建数据库的情况下运行 Rails 应用程序?

您可以通过取消注释 environment.rb 中的行来执行您的应用程序

路径=> 根路径 conf/environment.rb

config.frameworks = [ action_web_service, :action_mailer, :active_record]

24) 请讲一下 Ruby on Rails 中的观察者和回调函数有什么区别?

  • Rails 观察员: 观察者与回调相同,但它用于方法与对象生命周期不直接关联的情况。此外,观察者的寿命更长,并且可以随时分离或附加。例如,在 UI 中显示模型中的值并根据用户输入更新模型。
  • Rails 回调: 回调是一种可以在对象生命周期的某些时刻调用的方法,例如,可以在验证、创建、更新、删除对象时调用。回调的生命周期很短。例如,运行一个线程并给出一个在线程终止时调用的回调

25)解释一下 Rails 中的 rake 是什么?

Rake 是 Ruby Make;它是一个 Ruby 实用程序,可替代 Unix 实用程序“make”,并使用“Rakefile”和“.rake 文件”来构建任务列表。在 Rails 中,Rake 用于常规管理任务,例如通过脚本迁移数据库、将架构加载到数据库中等。


26)解释如何列出应用程序的所有路线?

要列出应用程序的所有路由,您可以在终端中写入 rake routes。


27)解释一下 Rails 中的清扫器是什么?

当模型对象发生变化时,清除器负责使缓存过期或终止。


28)提及在 Ruby Rails 中报告错误时必须查看的日志?

Rails 将在 log/Apache.log 中报告来自 Apache 的错误,并在 log/development.log 中报告来自 Ruby 代码的错误。


29)解释动态脚手架和静态脚手架有什么区别?

动态脚手架 静态脚手架
  • 它在运行时自动创建整个内容和用户界面
  • 它能够生成新的、删除的、编辑的方法以供在应用程序中使用
  • 不需要数据库同步
  • 它需要在命令中手动输入以创建数据及其字段
  • 它不需要任何这样的生成来发生
  • 需要迁移数据库

30)请提及 Ruby on Rails 中的垃圾收集功能是什么?

Ruby on Rails 中的垃圾收集功能包括

  • 它可以删除程序执行结束时留下的指针值
  • 它使程序员无需跟踪运行时动态创建的对象
  • 它的优点是从内存中删除无法访问的对象,并允许其他进程使用内存

31)请说说 Ruby on Rails 中重定向和渲染有什么区别?

  • 重定向是一种在浏览器无法发送或找不到页面时发出错误消息的方法。它告诉浏览器处理并发出新的请求。
  • Render 是用于制作内容的一种方法。仅当控制器正确设置了需要渲染的变量时,Render 才有效。

32)请说明一下 Rails 中 RJ 的用途?

RJs 是一个模板,它生成 JavaScript,浏览器在响应 AJAX 请求时会在 eval 块中运行该 JavaScript。它有时用于定义 Rails 提供的 JavaScript、Prototype 和帮助程序。


33)解释一下 Ruby on Rails 中的多态关联是什么?

多态关联允许一个 ActiveRecord 对象与多个 ActiveRecord 对象连接。多态关联的一个完美示例是社交网站,用户可以在任何地方发表评论,无论是视频、照片、链接、状态更新等。如果您必须创建单独的评论(如 photos_comments、videos_comment 等),则不可行。


34)请说说 Ruby on Rails 的局限性是什么?

Ruby on Rails 旨在使用 MVC 创建 CRUD Web 应用程序。这可能会使 Rails 对其他程序员来说没有用。Rails 不支持的一些功能包括

  • 数据库中的外键
  • 一次链接到多个数据库
  • Soap Web 服务
  • 同时连接多个数据库服务器

35)请说出调用 super() 和 super 调用之间有什么区别?

  • 超():调用 super() 会调用父方法而不带任何参数,这大概是意料之中的事情。一如既往,在代码中明确说明是一件好事。
  • 超级呼叫:调用 super 会使用传递给子方法的相同参数来调用父方法。因此,如果传递给子方法的参数与父方法的期望不匹配,就会发生错误。

36)解释一下 Dig、Float 和 Max?

  • 当函数不断变化时,就会使用 Float 类。
  • 每当您想用十进制数字表示浮点数时,都可以使用 Dig。
  • 当对 Float 有大量需求时,就会使用 Max。

37) 解释如何定义 Ruby 正则表达式?

Ruby 正则表达式是一种特殊的字符序列,可帮助您匹配或查找其他字符串。正则表达式文字是任意分隔符或斜杠之间的模式,后跟 %r。


38)解释什么是定义运算符?

定义运算符表示传递的表达式是否已定义。如果表达式已定义,则返回描述字符串,如果未定义,则返回空值。


39) 列出 Ruby 的几个特性?

  • 自由格式 – 您可以从程序中的任意行和列开始书写
  • 区分大小写 – 大写字母和小写字母是不同的
  • 评论 – 任何后面带有不带引号的 #到它出现的行尾,被解释器忽略
  • 语句分隔符- 一行上的多个语句必须用分号分隔,但在行尾不需要用分号分隔。

40)说出 Ruby 类中可用的变量类型?

Ruby 类中可用的变量类型有:

  • 局部变量
  • 全局变量
  • 类变量
  • 实例变量

41) 解释如何在 Ruby 中声明一个块?

在 Ruby 中,块中的代码始终包含在括号 ({}) 中。您可以使用“yield 语句”来调用块。


42)解释 put 和 putc 语句有什么区别?

与将整个字符串输出到屏幕上的 puts 语句不同,Putc 语句可用于一次输出一个字符。


43) 解释一下 Ruby 中的类库是什么?

Ruby 类库包含各种领域,例如线程编程、数据类型、各种领域等。这些类在高抽象级别上提供了灵活的功能,使您能够创建功能强大的 Ruby 脚本,这些脚本可用于各种问题领域。以下具有相关类库的领域是:

  • GUI编程
  • 网络编程
  • CGI 编程
  • 文字处理

44) 在 Ruby 中,如何解释定义的运算符?

defined 运算符判断传递的表达式是否已定义。如果表达式未定义,则返回 null;如果表达式已定义,则返回描述字符串。


45)请说出这两个变量的作用域有什么区别:@@name 和 @name?

这两个变量的范围区别在于:

  • @@name 是一个类变量
  • @name 是一个实例变量

46)请说一下 Ruby collect Iterator 的语法是什么?

Ruby collect Iterator collection = collection.collect 的语法。


47)在 Ruby 代码中,我们经常看到程序员使用简写形式的表达式,例如 排列.map(&:method_name) 而不是 array.map { |element| element.method_name }。这个技巧实际上如何起作用?

当传递参数时,前面带有“&”。Ruby 将对其调用 to_proc,以尝试将其用作块。因此,符号 to_Proc 将对传递给它的任何内容调用相应名称的方法。从而帮助我们的简写技巧发挥作用。


48)解释一下 Ruby 中的插值是什么?

Ruby 插值是将字符串插入文字的过程。通过在 {} 开括号和闭括号内放置哈希 (#),可以将字符串插入文字中。


49) 请说明在 Ruby 中用于表示类变量的符号是什么?

在 Ruby 中,

  • 常量应以大写字母开头,并且不应在方法内部定义
  • 本地必须以 _ 下划线符号或小写字母开头
  • 全局变量应该以 $ 符号开头。未初始化的全局变量的值为“nil”,它应该 提高 警告。它可以在程序的任何地方引用。
  • 类变量应以双 @@ 开头,并且在方法定义中使用之前必须先初始化

50)请说说 Procs 和 Blocks 之间的区别?

Procs 和 Blocks 之间的区别,

  • block 只是方法语法的一部分,而 proc 具有 block 的特征
  • 过程是对象,块不是
  • 参数列表中最多可以出现一个块
  • 只有 block 不能存储到变量中,而 Proc 可以

51)请说说单引号和双引号有什么区别?

单引号字符串不处理 ASCII 转义码,也不进行字符串插值。


52)请说说 Ruby 中 gem 和 plugin 有什么区别?

  • 宝石: 一个 gem 就是一个 ruby​​ 代码。它安装在一台机器上,并且可供该机器上运行的所有 ruby​​ 应用程序使用。
  • 插入: 插件也是 ruby​​ 代码,但它安装在应用程序文件夹中,并且仅适用于特定的应用程序。

53)请说说 extend 和 include 的区别?

“include” 使得模块的方法可供类的实例使用,而“extend”使得这些方法可供类本身使用。

这些面试问题也会对你的口试有帮助

分享

14条评论

  1. 头像 哈桑努扎曼·苏蒙 说:

    Yield 不是函数。它是用于执行块的 ruby​​ 关键字。

    1. 头像 特里·雷 说:

      具体来说,yield 将把线程(最有可能是 Main.thread)的控制权传递给作为参数明确传递的块,即 def my_method(&my_block) 或者可以隐式传递一个块,例如

      my_class.my_method 执行
      # 此块中的代码将被置于调用方法内部
      end

  2. 非常好……继续努力

  3. 豪尔赫·阿曼多 说:

    问题 6:Ruby 中没有“Boolean”类,因此也没有“Boolean 类型”。只有 TrueClass 和 FalseClass。

    1. 亚历克斯西尔弗曼 亚历克斯西尔弗曼 说:

      已更新。

  4. 头像 特里·雷 说:

    实际上是 Thread.main......我的错 :)

  5. Ruby 并非受 Python 启发,而是受到了以下语言的启发(Perl、Smalltalk、Eiffel、Ada、BASIC 和 Lisp)

    1. 亚历克斯西尔弗曼 亚历克斯西尔弗曼 说:

      已更新。

  6. 头像 穆尼克 说:

    很好地了解了 Ruby 和 Rails

  7. 6)nil.object_id 等于 8

发表评论

您的电邮地址不会被公开。 必填项 *