NetBeans IDE Ruby 快速入门教程
撰稿人:Chris Kutler
2008 年 10 月 [修订版本号:V6.5--1]
本教程为您提供了在 NetBeans IDE 中开发 Ruby 和 Ruby on Rails 应用程序的快速导览。本教程介绍如何使用 IDE 的 Ruby 支持来执行一些典型的应用程序开发任务。
为使本教程简单易学,本教程没有使用数据库。如果您对学习如何构建 Rails 数据库应用程序感兴趣,请参见在 10 分钟内创建 Ruby 博客教程。
目录

要完成本教程,您需要以下软件。
*支持 Ruby 和 Rails 的 NetBeans IDE 6.5 包含 JRuby 1.1.4 和 Rails 2.1.0 框架。请注意,JRuby 1.1.4 与 Rails 2.1.1 不兼容。
有关安装和配置 NetBeans Ruby 支持的信息,请参见安装和配置 Ruby 支持。
创建 Ruby 项目
项目相当于应用程序的工作环境。当您创建新 Ruby 项目时,可以选择从现有文件创建项目,也可以选择使用模板为 Rudy 项目创建一组新文件夹。
注意:当您打开在 IDE 外部构建的现有 Ruby 或 JRuby 项目时,IDE 对该项目所做的唯一与 NetBeans 软件相关的修改便是创建 nbproject 文件夹,该文件夹包含 NetBeans meta 数据。
可以同时在 IDE 中打开若干个项目。打开了多个项目时,当前项目是您正在对其执行操作(例如,编辑其中的某个文件)的项目。如果将某个项目设置为主项目,则只要该项目处于打开状态,它就一直是当前项目。当前项目的名称显示在 IDE 的标题栏中。当前项目是指 IDE 在您单击“运行项目”按钮时运行的项目。
创建新 Ruby 项目时,IDE 在缺省情况下会创建一个名为 main.rb 的文件,并将此文件设置为主脚本。单击“运行项目”按钮 (
) 后,IDE 会保存所有文件更改并运行主脚本。要切换到其他启动脚本,请右键单击“项目”窗口中的项目节点,然后从弹出式菜单中选择“属性”。选择“运行”类别,然后在“主脚本”文本字段中键入文件名。
试试看
执行以下步骤来创建 Ruby 项目。
-
如果您尚未完成此操作,则使用以下列表中的相应步骤来启动 IDE。
- Microsoft Windows、Solaris 和 Linux。双击 NetBeans 桌面图标。
- Apple Macintosh。双击安装文件夹中的 NetBeans 图标。
-
在“项目”窗口中的空白处单击鼠标右键,然后从弹出式菜单中选择“新建项目”,如下图所示。
您可以通过在主工具栏右侧显示的搜索框中键入操作的前几个字符来快速访问大多数菜单操作,如下图所示。

-
在“新建项目”向导的“类别”窗格中选择 "Ruby",并在“项目”窗格中选择“Ruby 应用程序”,如下图所示,然后单击“下一步”。

-
键入项目名称(例如 simple_ruby_application),如下图所示。

-
(可选)选择 Ruby 平台。
要将其他 Ruby 平台添加到列表中,请单击“管理”打开平台管理器。单击管理器的“帮助”按钮可以了解如何注册已安装的 Ruby 平台。
-
单击“完成”。
IDE 将在编辑器中显示 main.rb 文件,如下图所示。请注意代码如何调用 puts 来显示字符串 "Hello World"。

-
“项目”窗口将显示项目文件的逻辑视图。单击“文件”标签查看物理布局,然后切换回“项目”窗口。对于 Rudy 项目,这些视图非常类似。
-
单击“运行项目”按钮 (
) 运行应用程序。
IDE 将在 IDE 底部的窗口中显示输出,如下所示。

使用 Ruby 文件
使用 Ruby 项目文件的方式类似于从文本编辑器使用这些文件的方式。可以通过双击“项目”窗口或“文件”窗口中的文件节点来打开文件。也可以按 Alt-Shift-O 组合键(在 Mac 上按 Ctrl-Shift-O 组合键)按名称访问文件。
IDE 的编辑器提供了许多功能以简化您的编程任务。您将在本部分中了解一些基本的编辑功能。可以在 NetBeans Ruby 编辑 wiki 页中找到完整的编辑功能列表。
试试看。
执行以下步骤来创建一个用于显示产品列表的简单 Ruby 项目。首先,为产品项目类创建单元测试。接下来,创建 Item 类并运行单元测试来验证该类。最后,创建一个数据文件来提供项目数据,然后编辑 main.rb 文件以显示该列表。在您开发代码时,这些步骤也介绍了编辑功能。
创建 ItemTest 类
- 创建一个 Ruby 项目,或使用您在上一部分中创建的项目。
-
在“项目”窗口中,创建单元测试,方法是右键单击“测试文件”节点,然后从弹出式菜单中选择“新建”>“Ruby 单元测试”,如下图所示。

-
在“类”文本框中键入 ItemTest,如下图所示。
IDE 会根据“类”名称设置“文件名”。Ruby 约定将使用驼峰匹配(嵌入大写字母)分隔类名称中的字词,使用下划线分隔文件名中的字词。

-
确保从“位置”下拉列表中选择了“测试文件”。
-
单击“完成”。
IDE 将在编辑器中打开该文件。
-
将该文件的内容替换为以下代码。
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
require 'test/unit'
require 'item'
class ItemTest < Test::Unit::TestCase
PRICE = 24.95
TYPE = "book"
ID = "BF1"
def test_string
assert_equal("Item BF1 is a book: Price $24.95",
Item.new(ID, TYPE, PRICE).to_s, "Wrong String")
end
end
-
单击文件标签中的小 x 关闭该文件。在“问题”对话框出现时,单击“保存”。
创建 Item 类
-
在“项目”窗口中,通过右键单击“源文件”节点并从弹出式菜单中选择“新建”>“Ruby 类”来创建类文件。
-
在“类”文本框中键入 Item。
-
确保从“位置”下拉列表中选择了“源文件”。
-
单击“完成”。
IDE 将创建一个名为 item.rb 的文件,并在编辑器中打开该文件。
-
(可选)现在,您已创建 Item 类,可以试用单元测试了。右键单击 simple_ruby_application 项目节点,然后从弹出式菜单中选择“测试”。
由于您尚未定义该类,因此测试失败,如下图所示。
注意:“测试”操作会运行所有的项目单元测试。
-
将 item.rb 文件的内容替换为以下代码。
# Class to represent an item sold in the store.
class Item
def initialize(id, type, price)
@id, @type, @price = id, type, price
end
def to_s
"Item #{@id} is a #{@type}: Price $#{@price}"
end
# Returns an array of all the items sold in the store.
def self.load_item_data
items = []
File.open("data.txt") do |data_file|
data_file.readlines.each do |line|
items << Item.new(*line.split("\s"))
end
end
items
end
end
- 右键单击源文本,然后从弹出式菜单中选择“格式”重新设置代码的格式。
-
将光标放在 class Item 行上,然后按 Shift-Enter 组合键在类块的顶部打开一行。
-
此步骤与下面的三个步骤结合起来,显示如何使用代码完成。将光标放在空白行中,键入 attr_a,然后按 Ctrl-空格键。如果 Ctrl-空格键在您的系统上不起作用,请使用 Ctrl-\ 组合键。
IDE 将显示可能的代码完成列表,如下图所示。

-
选择 attr_accessor :attr_names rw,然后按 Enter 键。
IDE 将完成代码,并选择 attr_names 进行编辑,如下图所示。

-
键入 id, :type, :price 完成该语句,然后按 Enter 键。
该语句应该类似于以下代码。
attr_accessor :id, :type, :price
-
选择 attr_accessor 方法的每个参数,然后注意 IDE 如何突出显示每个属性的使用。
此 attr_accessor 方法调用会创建 id、type 和 price 的 getter 方法。这些 getter 方法使 Item 类的用户可以访问 id、type 和 price 实例变量的值。
-
接下来,将 open 方法的参数更改为常量。选择 "data.text" 字符串,包括引号。
可以使用 Alt-Shift-句点 (.) 组合键(在 Mac 上使用 Ctrl-Shift-句点组合键),这样将选中封闭块,从而选中该字符串。
注意显示在左旁注中的灯泡图标。此图标指示 IDE 提供了关于选定内容的提示。
-
将光标放在灯泡上查看提示,如下图所示。

-
按 Alt-Enter 组合键(在 Mac 上按 Ctrl-Shift-Enter 组合键)显示快速修复选项。
IDE 将显示所选字符串的可用快速修复,如下图所示。

-
选择“引入常量”,然后按 Enter 键。
将显示“引入常量”对话框。
-
在“名称”文本框中键入 data_file,然后单击“确定”。
IDE 将添加常量的声明,并将参数更改为使用常量而不是字符串。注意 IDE 是如何将常量名称更改为全部大写字母的。按照惯例,使用大写字母并插入下划线作为字词分隔符来拼写常量。
-
已完成的脚本应该类似于以下代码样例。
# Class to represent an item sold in the store.
class Item
# TODO Comment
DATA_FILE = "data.txt"
attr_accessor :id, :type, :price
def initialize(id, type, price)
@id, @type, @price = id, type, price
end
def to_s
"Item #{@id} is a #{@type}: Price $#{@price}"
end
# Returns an array of all the items sold in the store.
def self.load_item_data
items = []
File.open(DATA_FILE) do |data_file|
data_file.readlines.each do |line|
items << Item.new(*line.split("\s"))
end
end
items
end
end
-
现在,您可以验证类是否通过测试。在源代码中单击鼠标右键,然后从弹出式菜单中选择“测试文件”。
IDE 将在 ItemTest 类中运行测试,并在“Ruby 测试结果”窗口中显示输出,如下图所示。

创建数据文件
- 在“项目”窗口中,右键单击“源文件”节点,然后从弹出式菜单中选择“新建”>“其他”。
- 在“类别”窗格中选择“其他”,并在“文件类型”窗格中选择“空文件”,然后单击“下一步”。
- 在“文件名”文本框中键入 data.txt。
-
确保“文件夹”设置为 lib,然后单击“完成”。
注意:您要将该文本文件放在 lib 文件夹中,因为缺省情况下,从 IDE 运行项目时,工作目录为 lib 文件夹。
-
将以下文本粘贴到 data.txt 文件中。
BF15678 book 25.32
C29589 cd 18.95
F89028 beverage 2.00
BN98232 book 45.33
BF15890 book 15.98
创建主脚本并运行应用程序
-
在“项目”窗口中,双击 main.rb 以在编辑器窗口中显示该文件。将该文件的内容替换为以下语句,这些语句显示项目列表:
Item.load_item_data.each do |item|
line_item = item.to_s
line_item.gsub!(/book/, 'fiction \0') if item.id =~ /\AB[FN]/
line_item.gsub!(/fiction/, 'non-\0') if item.id =~ /\ABN/
puts line_item
end
puts "\n"
-
刚才复制的代码包含两个 Regexp 对象:/\AB[FN]/ 和 /\ABN/。将光标放在其中一个 Regexp 对象内,如下所示,然后按 Ctrl-空格键。
IDE 将显示正则表达式字符和字符组合的列表。查看插入到 data.txt 的数据,并判断哪些项目同时匹配这两个正则表达式。

-
按 Ctrl 键,并将光标拖到对 gsub 方法的某个调用上方。
IDE 将显示 gsub 方法的 RDoc 文档,如下图所示。
如果 Rdoc 文档超出了显示框的范围,则可以单击方法或类,并按 Ctrl-Shift-空格组合键(在 Mac 上按 Cmd-Shift-空格组合键)在带滚动条的显示框中查看 Rdoc。
-
在文件的顶部打开一行,然后键入 require '(单引号)。
请注意 IDE 是如何提供结束单引号并将光标放在引号之间的,如下图所示。IDE 自动插入和删除匹配的分隔符(例如引号、花括号和方括号)以及代码块的 end 语句。

-
将光标放在单引号内,键入字符 it,然后按 Ctrl-空格键。
由于 item.rb 文件是唯一可能以 "it" 开头的导入,因此 IDE 将使用 item 自动完成该字符串。
-
单击 line_item 变量的某个使用实例,然后按 Ctrl-R 组合键。
IDE 以蓝色突出显示该变量来指示“即时重命名”模式处于活动状态,如下图所示。

-
键入 print_line,然后按 Enter 键。
IDE 会将出现的所有 line_item 都更改为新名称。
-
要运行项目,请单击主工具栏中的“运行主项目”按钮。
IDE 将保存所有更改并运行 main.rb 脚本。应用程序输出将显示在“输出”窗口中,如下图所示。

- 要运用所学的知识进行实践,请创建另一个 Ruby 项目。使该项目能够读取和显示任务列表中的条目。
详细信息
创建 Ruby on Rails 项目
注意:此部分特定于 Rails 2.1。请注意 JRuby 与 Rails 2.1.1 不兼容。
除了 Ruby 项目外,使用 NetBeans Ruby 支持还可以处理 Ruby on Rails 项目。Rails 是一种框架,用于快速创建以数据库为后台、基于模型-视图-控制器 (MVC) 体系结构的 Web 应用程序。
要创建 Rails 项目,请在“项目”窗口中的空白处单击鼠标右键,然后从弹出式菜单中选择“新建项目”。从“类别”窗格中选择 Ruby,并从“项目”窗格中选择“Ruby on Rails 应用程序”或“基于现有源代码的 Ruby on Rails 应用程序”。创建基于现有源代码的项目时,使用“新建项目”向导的第 2 步可以命名项目并指定其位置。
与处理 Ruby 项目一样,您可以从下拉列表中选择 Ruby 平台。如果您安装的平台未显示在下拉列表中,请单击“管理”添加该平台。
缺省情况下,IDE 将项目设置为使用三个 MySQL 数据库,这三个数据库的名称分别为 project_development、project_test 和 project_production,其中 project 是 Rails 项目的名称。要更改缺省配置,可以编辑 database.yml 文件,该文件将在您创建项目后在编辑器中打开。或者,也可以单击项目向导中的“下一步”来显示“数据库配置”页,如下图所示。

要更改项目的设置,请右键单击项目节点,然后从弹出式菜单中选择“属性”。通过“项目属性”对话框(如下图所示),可以配置项目的平台、服务器、模式和编码,以及为 rake 命令指定参数。还可以为项目创建不同的配置,并使用此对话框来切换各个配置。

试试看
执行以下步骤来创建 Ruby on Rails 项目。
- 在“项目”窗口中的空白处单击鼠标右键,然后从弹出式菜单中选择“新建项目”。
- 在“新建项目”向导的“类别”窗格中选择 "Ruby",并在“项目”窗格中选择“Ruby on Rails 应用程序”,然后单击“下一步”。
- 命名项目,例如,simple_rails_application。
-
单击“完成”。
本教程没有使用数据库,因此您不需要执行任何数据库配置。
- 检查“项目”窗口中文件结构的逻辑视图。
- 右键单击项目的节点(项目的根节点),并注意菜单选项。
-
单击“文件”标签,并将此物理文件结构与“项目”窗口中显示的逻辑视图进行比较。
下图并排显示了这两个窗口,这样便于比较两种视图。
要使“项目”窗口显示物理布局而不是逻辑布局,请从主菜单中选择“工具”>“选项”,然后单击“其他”。单击 "Ruby" 标签,清除“显示逻辑项目视图”复选框,然后重新启动 IDE。
-
在“文件”窗口中,右键单击项目的节点。
请注意弹出的菜单选项与“项目”窗口中弹出式菜单的不同之处。例如,“项目”窗口中项目节点的弹出式菜单提供“生成”、“运行/调试 Rake 任务”和“Rails 控制台”操作,以及其他许多特定于 Rails 的操作。
详细信息
- 有关从“项目”向导配置数据库的详细信息,请参见结合使用数据库服务器和 JRuby 以及“新建 Ruby on Rails 应用程序”向导:数据库配置帮助主题。要快速访问帮助主题,请在主工具栏的搜索框中键入 database。
使用 Ruby on Rails 文件
注意:本部分是为 Rails 2.1 编写的。
与处理 Ruby 项目一样,您可以通过双击“项目”窗口或“文件”窗口中的文件节点在编辑器中打开该文件。或者,也可以按 Alt-Shift-O 组合键(在 Mac 上使用 Ctrl-Shift-O 组合键)按名称访问文件。
使用“项目”窗口中节点的弹出式菜单,您可以轻松访问 Rails 脚本和 Rake 任务,例如,用于生成代码的 generate 脚本和用于迁移至特定版本的数据库表的 db:migrate 任务。
IDE“了解”文件类型之间的关系,并且可以帮您轻松导航至关联的文件。例如,如果您要编辑视图文件,则可以使用弹出式菜单导航至关联的操作文件或测试。
对于所有 NetBeans 项目,您都可以通过以下方式运行应用程序:单击“运行项目”按钮,或者右键单击项目的节点,然后从弹出式菜单中选择“运行”。IDE 会保存所有文件更改,启动 Web 服务器(如有必要),然后在浏览器中显示应用程序的起始页。您还可以使用编辑器中的“运行文件”菜单操作,在浏览器中打开正在编辑的控制器、操作、视图或帮助程序的相关 URL。
试试看
完成以下步骤来创建使用 Ruby 文件部分中介绍的样例项目的 Rails 版本。在此变化版本中,构造函数采用散列而不是位置参数,并且您将从 YAML 文件获取数据。
注意:通常,对于 Rails 项目,可以根据数据库表创建模型类。但是,为了使此样例简单易学,应用程序将从 YAML 文件获取其数据。要了解如何使用 IDE 构建 Rails 数据库应用程序,请参见在 10 分钟内创建 Ruby 博客教程。
创建模型类
- 创建一个 Ruby on Rails 项目,或使用您在上一部分中创建的项目。
-
在“项目”窗口中,展开“配置”,然后双击 environment.rb 在编辑器中打开该文件。
-
向下滚动到以下注释(大概在第 20 行)。
要显示行号,请在编辑器的左旁注中单击鼠标右键,然后选择“显示行号”。
# Skip frameworks you're not going to use (only works if using vendor/rails). # To use Rails without a database, you must remove the Active Record framework
# config.frameworks -= [ :active_record, :active_resource, :action_mailer
-
取消对第三行的注释,如以下代码所示。
# Skip frameworks you're not going to use (only works if using vendor/rails). # To use Rails without a database, you must remove the Active Record framework
config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
您可以单击“取消注释”按钮(
)来取消对选定行的注释。
根据 Rails 的 Convention over configuration(约定优于配置)原则,Rails 2 应用程序将尝试访问 database.yml 文件中指定的数据库。由于此应用程序未使用数据库,因此您必须从环境配置中删除“活动记录”框架,这样应用程序就不会尝试访问数据库。
- 展开“配置”,展开初始化函数,然后双击 new_rails_defaults.rb 在编辑器中将其打开。
-
找到以 ActiveRecord::Base 开头的以下两行,然后将它们注释掉。
# Include Active Record class name as root for JSON serialized output.
ActiveRecord::Base.include_root_in_json = true
# Store the full class name (including module namespace) in STI type column.
ActiveRecord::Base.store_full_sti_class = true
注意:这是 Rails 2.1 中的一个错误,我们将在以后的发行版中修复。
-
在“项目”窗口中,右键单击“模型”节点,然后从弹出式菜单中选择“生成”。
“Rails 生成器”对话框将打开,其中在“生成”下拉列表中选择了 model,如下图所示。

-
在“参数”文本框中键入 Item,然后单击“确定”。
生成器将创建一个名为 item.rb 的文件,并在编辑器中打开该文件。该文件的一个节点会显示在“项目”窗口中“模型”节点下。缺省情况下,生成器会在“单元测试”下创建一个测试套件,在“包含测试对象数据的文件”下创建一个包含测试对象数据的文件,并在“数据库迁移”> "migrate" 下创建迁移。
-
将 item.rb 文件的内容替换为以下代码。
# _Item_
#
# Takes:
# :id => unique item id
# :type => type of item
# :price => price of the item
class Item
DATA_FILE = RAILS_ROOT + "/data.yml"
attr_accessor :id, :type, :price
def initialize(attributes)
@id = attributes['id']
@type = attributes['type']
@price = attributes['price']
end
def to_s
"Item #{@id} is a #{@type}: Price $#{@price}"
end
# Returns an array of all the items sold in the store.
def self.load_item_data
YAML.load_file(DATA_FILE).collect do |item_hash|
Item.new(item_hash)
end
end
end
生成文档
-
右键单击项目的节点,然后从弹出式菜单中选择“运行/调试 Rake 任务”。
-
在“过滤器”文本框中键入 doc。
“匹配任务”列表将范围缩小到名称中包含 doc 的所有 Rake 任务,如下图所示。

-
双击 doc:app 的条目。
IDE 将运行 doc:app 任务并将输出放在“文档”> "app" 中。可能需要经过一段时间,app 节点才会显示在“项目”窗口中的“文档”下。
-
要查看 Item 类的文档,请右键单击“文档”> "app" > "classes" > "Item.html",然后从弹出式菜单中选择“视图”。
创建数据文件
- Item 类需要从 data.yml 文件获取其数据。要创建此文件,请在“项目”窗口中右键单击项目的节点,然后从弹出式菜单中选择“新建”>“其他”。
- 在“新建文件”对话框的“类别”窗格中选择 "Ruby",并在“文件类型”窗格中选择“YAML 文件”,然后单击“下一步”。
-
在“文件名”文本框中键入 data,然后单击“完成”。
IDE 将在项目的根文件夹中创建一个名为 data.yml 的文件,并在编辑器中打开该文件。该文件的节点可能不会立即显示在“项目”窗口中。
-
将 data.yml 文件的内容替换为以下文本。
-
id: BF15678
type: book
price: 25.32
-
id: C29589
type: cd
price: 18.95
-
id: F89028
type: beverage
price: 2.00
-
id: BN98232
type: book
price: 45.33
-
id: BF15890
type: book
price: 15.98
创建控制器和视图
-
模型已准备就绪。现在添加控制器和视图。在“项目”窗口中,右键单击“控制器”节点,然后从弹出式菜单中选择“生成”。
“Rails 生成器”对话框将打开,其中在“生成”下拉列表中选择了 controller,如下图所示。

-
在“名称”文本框中键入 Item,在“视图”文本框中键入 index,然后单击“确定”。
生成器将创建 ItemController 类和 index.html.erb 视图(位于“视图”>“项目节点”下)。此外,生成器还会创建“功能测试”> "item_controller_test.rb",以及“帮助程序”> "item_helper.rb"。
-
将 item_controller.rb 文件的内容替换为以下代码。
class ItemController < ApplicationController
def index
@items = Item.load_item_data
end
end
index 操作(控制器在调用索引视图之前调用该操作)会将项目列表填入 @items 全局数组。
-
要快速访问 index.html.erb 文件,请右键单击索引定义中的某一行,然后从弹出式菜单中选择“导航”>“转至 Rails 操作或视图”,如下图所示。

-
将 index.html.erb 的内容替换为以下标记。
<h1>List of Items</h1>
<table border="1">
<tr><th>Id</th><th>Type</th><th>Price</th></tr>
<% for item in @items %>
<tr>
<td><%= item.id %>
</td>
<td><%= item.type %></td>
<td align="right"><%= number_to_currency(item.price) %></td>
</tr>
<% end %>
</table>
嵌入 HTML 中的 Ruby 代码会对 @items 全局数组(在控制器中由索引操作定义)执行迭代。
运行应用程序
-
单击主工具栏中的“全部保存”按钮保存所有更改。
此时将不再显示文件标签中用于指示已修改文件的星号 (*)。
-
右键单击源文本,然后从弹出式菜单中选择“运行文件”。
IDE 将向服务器发送项目控制器和索引操作的 URL,服务器又会将以下页面发送给浏览器。

-
尝试单击“运行主项目”来运行整个应用程序。
请注意,此时会显示标准的 Ruby on Rails 欢迎页面。这是因为在缺省情况下,路由器显示“公共”> "index.html" 文件。您可以按照以下步骤更改路由。
- 在“项目”窗口中,展开“公共”。
- 右键单击 "index.html" 节点,然后从弹出式菜单中选择“删除”。
- 在“项目”窗口中,展开“配置节点”,双击 routes.rb 在编辑器中打开它。
- 查找以下注释。
# map.root :controller => "welcome"
将该注释替换为以下代码。
map.root :controller => "item"
-
要确保服务器实现路由更改,请单击显示在“输出”窗口服务器标签左旁注中的服务器停止按钮,如下图所示。

- 右键单击项目的节点,然后从弹出式菜单中选择“运行”在浏览器中启动该应用程序。
- 要运用所学的知识进行实践,请创建另一个 Rails 项目。使该项目能够读取和显示任务列表中的条目。
详细信息
后续步骤
>> 更多 NetBeans Ruby 文档