FeaturesPluginsDocs & SupportCommunityPartners

Ruby 和 Rails 入门

本教程将带给您一段有关 NetBeans IDE 中 Ruby 和 Ruby on Rails 应用程åº?开å?‘的旋风之旅。本教程将通过完æˆ?应用程åº?开å?‘中的几个典型阶段æ?¥å?‘您展示如何使用 IDE 的 Ruby 支æŒ?æ?¥è¿›è¡Œåº”用程åº?开å?‘。

由于本教程的设计使然,您ä¸?必按任何特定的顺åº?进行学习。您å?¯ä»¥å¿«é€Ÿåœ°æµ?览本教程,然å?Žåœ¨æ—¶é—´å…?许的情况下回顾å?„个部分。如果您喜欢按部就ç?­çš„æ•™ç¨‹ï¼Œæ‚¨å?¯ä»¥å…ˆå°?试一下 10 分钟创建 Ruby Weblog。

目录

创建 Ruby 项目
使用 Ruby 文件
创建 Ruby on Rails 项目
使用 Ruby on Rails 文件
使用 JRuby Interactive Ruby(IRB)控制å?°
  本页é?¢çš„内容适用于 NetBeans IDE 6.0

教程需求


学习本教程需è¦?以下技术和资æº?:

å?‚è§?安装和é…?ç½® Ruby 支æŒ?一文以获å?–有关安装和é…?ç½® NetBeans Ruby 支æŒ?以å?Šä»Ž NetBeans Ruby on Rails 项目中使用数æ?®åº“æœ?务器工作的信æ?¯ã€‚

创建 Ruby 项目


所谓项目,它相当于一个应用程åº?的工作环境。当您创建一个新的 Ruby 项目时,您å?¯ä»¥é€‰æ‹©ä½¿ç”¨å·²æœ‰æ–‡ä»¶åˆ›å»ºé¡¹ç›®ï¼Œæˆ–者为您的 Ruby 项目使用模æ?¿åˆ›å»ºä¸€ç»„新文件夹。

注æ„?:当您打开一个在 IDE 之外构建的已有 Ruby 或 JRuby 项目时,IDE 对该项目所å?šçš„与 NetBeans 软件相关的唯一改动,仅仅是创建一个å??为 nbproject 的文件夹,用以存储 NetBeans 元数æ?®ã€‚

您å?¯ä»¥åœ¨ IDE 中å?Œæ—¶æ‰“开多个项目。当您打开超过一个项目时,您必须指定 其中一个为主项目。主项目是当您点击“è¿?行主项目â€?按钮时 IDE 所è¿?行的那个。è¦?切æ?¢ä¸»é¡¹ç›®ï¼Œåœ¨â€œé¡¹ç›®â€?窗å?£ä¸­å?³é”®ç‚¹å‡»ä¸€ä¸ªé¡¹ç›®ï¼Œç„¶å?Žé€‰æ‹©â€œè®¾ç½®ä¸ºä¸»é¡¹ç›®â€?。

当您创建一个新的 Ruby 项目时,IDE 会默认创建一个å??为 main.rb 的文件,并将该文件设置为主脚本。当您点击“è¿?行主项目â€?按钮(“è¿?行主项目â€?按钮)时,IDE 会ä¿?存所有文件改动并è¿?行主脚本。è¦?切æ?¢è‡³ä¸€ä¸ªä¸?å?Œçš„å?¯åŠ¨è„šæœ¬ï¼Œåœ¨â€œé¡¹ç›®â€?窗å?£ä¸­å?³é”®ç‚¹å‡»é¡¹ç›®èŠ‚ç‚¹ï¼Œç„¶å?Žåœ¨å¼¹å‡ºè?œå?•中选择“属性â€?。选择“è¿?行â€?æ ?目,然å?Žåœ¨â€œä¸»è„šæœ¬â€?文本框中键入文件å??。

注æ„?:main.rb 文件是为 Ruby 项目创建。当您创建一个 Ruby on Rails 项目时,如在创建 Ruby on Rails 项目一节所示,IDE ä¸?会创建 main.rb 文件。

试试看

下é?¢å?³ä¸ºåˆ›å»º Ruby 项目的步骤。

  1. 如果您尚未开始,那么首先使用下é?¢æ‰€åˆ—的适当步骤å?¯åЍ IDE:

    • Windowsã€?Solaris 和 Linux å?Œå‡» NetBeans 桌é?¢å›¾æ ‡ã€‚
    • Mac å?Œå‡»å®‰è£…文件夹中的 NetBeans 图标。
  2. å?³é”®å?•击“项目â€?窗å?£ä¸­çš„空白处,然å?Žåœ¨å¼¹å‡ºè?œå?•中选择“新建项目â€?。
  3. 在“新建项目â€?å?‘导中,选中“类别â€?é?¢æ?¿ä¸­çš„ Ruby,选中“项目â€?é?¢æ?¿ä¸­çš„“Ruby 应用程åº?â€?,然å?Žç‚¹å‡»ä¸‹ä¸€æ­¥ã€‚如果此项目是您打开或创建的第一个 Ruby 项目,则å?¯èƒ½ä¼šå‡ºçŽ°ä¸€ä¸ªå¯¹è¯?框,è¦?求您选择一个 Ruby 解释器。在解释器选项中选中一个,然å?Žç‚¹å‡»â€œç¡®å®šâ€?。
  4. 给项目命å??,例如 simple_ruby_application,然å?Žç‚¹å‡»â€œå®Œæˆ?â€?。

    IDE 会在编辑器中显示 main.rb 文件。留æ„?代ç ?是如何调用 puts æ?¥æ˜¾ç¤ºå­—符串“Hello Worldâ€?的。

  5. “项目â€?窗å?£å±•示了项目文件的逻辑视图。点击“文件â€?选项å?¡æŸ¥çœ‹ç‰©ç?†å¸ƒå±€ï¼Œç„¶å?Žåˆ‡æ?¢å›ž, 开关“项目â€?窗å?£ã€‚对于 Ruby 项目,这两个视图是很相似的。
  6. 点击“è¿?行主项目â€?按钮(“è¿?行主项目â€?按钮)è¿?行应用程åº?。

    IDE 会在其底部的窗å?£ä¸­æ˜¾ç¤ºè¾“出,如下图所示。

    图 1:“输出â€?窗å?£

    “输出â€?窗å?£

使用 Ruby 文件


æ“?作 Ruby 项目文件与使用文本编辑器处ç?†å®ƒä»¬æ¯”较类似。您å?¯ä»¥é€šè¿‡å?Œå‡»â€œé¡¹ç›®â€?窗å?£æˆ–者“文件â€?窗å?£ä¸­çš„æ–‡ä»¶èŠ‚ç‚¹æ‰“å¼€æ–‡ä»¶ã€‚æ‚¨ä¹Ÿå?¯ä»¥æŒ‰ä¸‹â€œAlt-Shift-Oâ€?组å?ˆé”®ï¼ˆåœ¨ Mac 中请使用“Ctrl-Shift-Oâ€?组å?ˆé”®ï¼‰æ?¥é€šè¿‡æ–‡ä»¶å??访问文件。

IDE 的编辑器æ??供了很多特性æ?¥å¸®æ‚¨å®Œæˆ?程åº?设计的任务。您将在本节学习一些基本的编辑特性。完整的编辑特性列表å?¯ä»¥å?‚考 NetBeans Ruby Editing Wiki 页é?¢ã€‚

试试看

下é?¢çš„æ­¥éª¤å°†åˆ›å»ºä¸€ä¸ªç”¨ä»¥æ˜¾ç¤ºäº§å“?列表的简å?•çš„ Ruby 项目。首先,为一个å?•独的产å“?æ?¡ç›®åˆ›å»ºä¸€ä¸ªç±»ã€‚ç„¶å?Žï¼Œä¸ºæ?¡ç›®åˆ—表创建一个类,以å?Šä¸€ä¸ªæ•°æ?®æ–‡ä»¶æ?¥æ??供产å“?数æ?®ã€‚最å?Žï¼Œç¼–缉 main.rb 文件显示列表。在开å?‘代ç ?的å?Œæ—¶ï¼Œè¿™äº›æ­¥éª¤ä¹Ÿä¼šä»‹ç»?编辑特性。

创建 Item 类

  1. 创建一个 Ruby 项目,或者使用您在å‰?一节中所创建的那个。
  2. 在“项目â€?窗å?£ä¸­ï¼Œå?³é”®ç‚¹å‡»â€œæº?文件â€?节点,在弹出è?œå?•中选择“新建â€?->“Ruby ç±»â€?,创建一个类文件。在“类â€?文本框中键入 Item,然å?Žç‚¹å‡»â€œå®Œæˆ?â€?。

    IDE 会创建一个å??为 item.rb 的文件,并在编辑器中将其打开。
  3. 将 item.rb 文件中的内容替æ?¢æˆ?下é?¢ä¸?正确的代ç ?。您将在余下的步骤中修正这些代ç ?。

    代ç ?示例 1:Item ç±»
    class Item
    def initialize(id, type, price)
    end
    def simple_method(id, type, price)
    @id = id
    @type = type
    @price = price.to_f
    end
    def to_s
    "Item #{@id} is a #{@type}: Price $#{@price}"
    end
    end
  4. 在æº?文件中点击å?³é”®ï¼Œç„¶å?Žåœ¨å¼¹å‡ºè?œå?•中选择“格å¼?化代ç ?â€?,格å¼?化代ç ?。
  5. 留æ„? initialize 方法的å?‚数下é?¢çš„ç?°è‰²æ³¢æµªçº¿ï¼Œå¦‚下图所示。这些线标示出了未使用的å?˜é‡?。您将在å?Žé?¢ä¸¤ä¸ªæ­¥éª¤ä¸­ä¿®æ­£è¯¥é”™è¯¯ã€‚

    图 2:未使用的å?˜é‡?

    未使用的å?˜é‡?
  6. 将光标置于 @type(ä½?于 simple_method 中),然å?ŽæŒ‰ä¸‹â€œAlt-Shift-Periodâ€?组å?ˆé”®ï¼ˆPeriod 是å?¥ç‚¹å?·ï¼Œåœ¨ Mac 中请使用“Ctrl-Shift-Periodâ€?组å?ˆé”®ï¼‰æ?¥é€‰ä¸­è¯¥è¡Œã€‚å†?一次按下按键组å?ˆæ?¥é€‰ä¸­å?—,如下图所示。

    图 3:多行选择

    多行选择
  7. 在æº?文件中点击å?³é”®ï¼Œç„¶å?Žåœ¨å¼¹å‡ºè?œå?•中选择“剪切â€?。
  8. 将光标置于构造函数头部(initialize 方法),然å?ŽæŒ‰ä¸‹â€œShift-Enterâ€?组å?ˆé”®ï¼Œåœ¨å½“å‰?行下添加一个新行。在新行处点击å?³é”®ï¼Œç„¶å?Žä»Žå¼¹å‡ºå¼?è?œå?•中选择“粘贴â€?。
  9. simple_method 方法的目的原是æ?¥ä¿?存之å‰?步骤中所需的代ç ?。现在,您å?¯ä»¥å°†æ­¤æ–¹æ³•删除掉。首先,将光标置于 simple_method 方法的 end 语å?¥å¤„。

    留æ„? IDE 会高亮显示其对应的 def 语å?¥ã€‚
  10. 按下“Alt-Shift-Periodâ€?组å?ˆé”®ï¼ˆPeriod 是å?¥ç‚¹å?·ï¼Œåœ¨ Mac 中请使用“Ctrl-Shift-Periodâ€?组å?ˆé”®ï¼‰æ?¥é€‰ä¸­è¯¥æ–¹æ³•,然å?ŽæŒ‰ä¸‹â€œBackSpaceâ€?键将其删除。
  11. 将光标置于空行处,按下“Ctrl-Eâ€?组å?ˆé”®ï¼ˆåœ¨ Mac 中请使用“Cmd-Eâ€?组å?ˆé”®ï¼‰å°†å…¶åˆ é™¤ã€‚
  12. 接下æ?¥çš„几步将展示如何使用代ç ?补全功能。在类å?—顶部打开一个空行,将光标置于该行处,键入 attr_a,然å?ŽæŒ‰ä¸‹â€œCtrl-Spaceâ€?组å?ˆé”®ï¼ˆè‹¥â€œCtrl-Spaceâ€?组å?ˆé”®åœ¨æ‚¨çš„系统中无效,请使用“Ctrl-\â€?组å?ˆé”®ï¼‰ã€‚

    IDE 会显示一个列表,列出å?¯èƒ½çš„代ç ?补全,如下图所示。

    图 4:attr_a 的代ç ?补全列表

    attr_a  的代ç ?补全列表
  13. 选择 attr_accessor :attr_names rw,然å?ŽæŒ‰ä¸‹â€œEnterâ€?键。

    IDE 将补全代ç ?,并选择 attr_names 用于编辑,如下图所示。

    图 5:补全的代ç ?

    补全的代ç ?
  14. 键入 id, :type, :price æ?¥å®Œæˆ?语å?¥ï¼Œç„¶å?ŽæŒ‰ä¸‹â€œEnterâ€?键。

    语å?¥åº”如以下代ç ?所示。
    attr_accessor :id, :type, :price
  15. 选择 attr_accessor 方法的æ¯?一个å?‚数,留æ„? IDE 会高亮显示æ¯?个属性的使用。

    完æˆ?å?Žçš„脚本应如以下代ç ?示例所示。

    代ç ?示例 2:格å¼?化å?Žçš„ Item ç±»
    class Item
      attr_accessor :id, :type, :price
      def initialize(id, type, price)
        @id = id
        @type = type
        @price = price.to_f
      end
      def to_s
        "Item #{@id} is a #{@type}: Price $#{@price}"
      end
    end

创建 ItemsList 类

  1. 在“项目â€?窗å?£ä¸­ï¼Œå?³é”®ç‚¹å‡»â€œæº?文件â€?节点,在弹出è?œå?•中选择“新建â€?->“Ruby ç±»â€?,创建å?¦ä¸€ä¸ªç±»æ–‡ä»¶ã€‚在“类â€?文本框中键入 ItemsList,然å?Žç‚¹å‡»â€œå®Œæˆ?â€?。注æ„?,IDE 会将文件命å??为 items_list.rb。
  2. 用下列语å?¥æ›¿æ?¢ items_list.rb 文件的内容。

    代ç ?示例 3:ItemsList ç±»
    class ItemsList
    
      DATA_FILE="data.txt"
      attr_accessor :items
    
      def initialize
        @items = ItemsList.load_item_data
      end
    
      private
    
      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
  3. 在类定义å‰?é?¢æ‰“开一个空行,并键入 require'(å?•引å?·ï¼‰ã€‚

    留æ„? IDE 会æ??供结尾处的å?•引å?·ï¼Œå¹¶å°†å…‰æ ‡ç½®äºŽä¸¤ä¸ªå¼•å?·å†…部,如下图所示。 IDE 能自动æ?’入或者删除匹é…?的分隔符,如引å?·ã€?花括å?·ã€?å°?括å?·ï¼Œä»¥å?Šä»£ç ?å?—çš„ end 语å?¥ç­‰ç­‰ã€‚

    图 6:分隔符对匹é…?

    分隔符对匹é…?
  4. 光标ä½?于引å?·å†…部,键入 it,然å?ŽæŒ‰ä¸‹â€œCtrl-Spaceâ€?组å?ˆé”®ã€‚仅有一项å?¯ç”¨çš„ import 是以“itâ€?开头的,如下图所示。按下“Tabâ€?键接å?—该选项。

    图 7:require 语å?¥çš„代ç ?补全

    require 语å?¥çš„代ç ?补全

创建数æ?®æ–‡ä»¶

  1. 在“项目â€?窗å?£ä¸­ï¼Œå?³é”®ç‚¹å‡»â€œæº?文件â€?节点,然å?Žåœ¨å¼¹å‡ºè?œå?•中选择“新建â€?>“其他â€?。在“类别â€?é?¢æ?¿ä¸­é€‰æ‹©â€œå…¶ä»–â€?,在“文件类型â€?é?¢æ?¿ä¸­é€‰æ‹©â€œç©ºæ–‡ä»¶â€?,然å?Žç‚¹å‡»â€œä¸‹ä¸€æ­¥â€?。
  2. 在“文件å??â€?文本框中键入 data.txt。
  3. ç¡®ä¿?“文件夹â€?被设置为 lib,点击“完æˆ?â€?。

    注æ„?:您正将该文本文件放置在 lib 文件夹中,因为,在默认情况下,当您从 IDE 中è¿?行项目时,默认的工作目录å?³ä¸º lib 文件夹。
  4. 将下列文本粘贴至 data.txt 文件中。

    代ç ?示例 4:产生数æ?®
    BF15678 book 25.32
    C29589 cd 18.95
    F89028 beverage 2.00
    BN98232 book 45.33
    BF15890 book 15.98

创建主脚本并è¿?行应用程åº?

  1. 在“项目â€?窗å?£ä¸­ï¼Œå?Œå‡» main.rb,将其显示在编辑器窗å?£ä¸­ã€‚使用下列语å?¥æ›¿æ?¢å…¶å†…容,这些语å?¥å°†æ˜¾ç¤ºæ?¡ç›®åˆ—表:

    代ç ?示例 5:用于 main.rb 的内容
    require 'items_list'
    
    items_list = ItemsList.new
    items_list.items.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"
  2. 刚刚å¤?制的代ç ?中包å?«ä¸¤ä¸ªæ­£åˆ™è¡¨è¾¾å¼?对象:/\AB[FN]/ 和 /\ABN/。将光标置于其中一个正则表达å¼?对象内部,如下所示,并按下“Ctrl-Spaceâ€?组å?ˆé”®ã€‚ IDE 会显示一个列有正则表达å¼?字符å?Šå­—符组å?ˆçš„列表。看一下代ç ?示例 5 中的数æ?®ï¼Œå¹¶çŒœæµ‹ä¸€ä¸‹å“ªä¸ªæ?¡ç›®ä¼šè¢«è¿™ä¸¤ä¸ªæ­£åˆ™è¡¨è¾¾å¼?分别匹é…?。

    图 8:正则表达å¼?的代ç ?补全

    正则表达å¼?的代ç ?补全
  3. 点击主工具æ ?中的“è¿?行主项目â€?按钮æ?¥è¿?行项目。

    IDE 会ä¿?存所有改动,并è¿?行 main.rb 脚本。应用程åº?的输出将会出现在“输出â€?窗å?£ä¸­ï¼Œå¦‚下图所示。

    图 9:simple_ruby_application 的输出

    simple_ruby_application 的输出
  4. 为了练习一下目å‰?所学到的内容,创建 å?¦ä¸€ä¸ª Ruby 项目。阅读项目,并在任务列表中显示æ?¡ç›®ã€‚

更多信æ?¯

创建 Ruby on Rails 项目


在 IDE 中创建 Ruby on Rails 项目与在终端窗å?£ä¸­ä½¿ç”¨ rails 命令å??分类似。实际上,当您创建项目时,IDE 会创建与 rails 所创建的相å?Œçš„æ–‡ä»¶å¤¹å’Œæ–‡ä»¶ã€‚

创建一个项目,å?¯ä»¥é€šè¿‡åœ¨â€œé¡¹ç›®â€?窗å?£ä¸­å?³é”®ç‚¹å‡»ï¼Œç„¶å?Žåœ¨å¼¹å‡ºè?œå?•中选择“新建项目â€?æ?¥å®žçŽ°ã€‚åœ¨â€œç±»åˆ«â€?é?¢æ?¿ä¸­é€‰æ‹©â€œRubyâ€?,在“项目â€?é?¢æ?¿ä¸­é€‰æ‹©â€œRuby on Rails 应用程åº?â€?或者“包å?«å·²æœ‰ä»£ç ?的 Ruby on Rails应用程åº?â€?。

您å?¯ä»¥åœ¨ IDE 中å?Œæ—¶æ‰“开多个项目。主项目(NetBeans 动作实际æ“?作的项目)节点会以粗体显示。è¦?切æ?¢ä¸»é¡¹ç›®ï¼Œåœ¨â€œé¡¹ç›®â€?窗å?£ä¸­å?³é”®ç‚¹å‡»ä¸€ä¸ªé¡¹ç›®ï¼Œç„¶å?Žé€‰æ‹©â€œè®¾ç½®ä¸ºä¸»é¡¹ç›®â€?。

如下图所示,“新建项目â€?å?‘导的第二个页é?¢è®©æ‚¨å¯¹é¡¹ç›®è¿›è¡Œå‘½å??,并指定其ä½?置。在下拉列表中æ??供了一些支æŒ?的数æ?®åº“æœ?务器å??称。IDE 使用选定的数æ?®åº“æœ?务器以å?Šâ€œä½¿ç”¨ JDBC 访问数æ?®åº“â€?选项æ?¥å†³å®šå¦‚何对 database.yml 文件写入内容。

图 10:“新建 Ruby on Rails 项目â€?å?‘导的第二页

“新建 Ruby on Rails 项目â€?å?‘导的第二页

试试看

按如下步骤æ?¥åˆ›å»ºä¸€ä¸ª Ruby on Rails 项目。

  1. å?³é”®ç‚¹å‡»â€œé¡¹ç›®â€?窗å?£ä¸­çš„空白处,然å?Žåœ¨å¼¹å‡ºè?œå?•中选择“新建项目â€?。
  2. 在“新建项目â€?å?‘导中,选中“类别â€?窗格中的 Ruby,选中“项目â€?窗格中的“Ruby on Rails应用程åº?â€?,然å?Žç‚¹å‡»â€œä¸‹ä¸€æ­¥â€?。如果此项目是您打开或创建的第一个 Ruby 项目,则å?¯èƒ½ä¼šå‡ºçŽ°ä¸€ä¸ªå¯¹è¯?框,è¦?求您选择一个 Ruby 解释器。在解释器选项中选中一个,然å?Žç‚¹å‡»â€œç¡®å®šâ€?。
  3. 命å??该项目,如 simple_rails_application。
  4. 接下æ?¥ï¼Œé€‰æ‹©åº”用程åº?è¦?使用的数æ?®åº“æœ?务器。若正在使用 JRuby,则必须选择 MySQLã€?PostgresSQLã€?Oracleã€?HSQLDB 或者 Java DB(也称为 Derby)。

    IDE 使用这些信æ?¯æ?¥åˆ?始化 database.yml 文件。

    注æ„?:若仅在本教程中使用此项目,则无需访问任何数æ?®åº“,故å?¯ä»¥æŽ¥å?—默认的数æ?®åº“设置。
  5. 若正在使用 JRuby,且访问 MySQL 之外的数æ?®åº“æœ?务器,则必须选中“使用 JDBC 访问数æ?®åº“â€?å¤?选框。若数æ?®åº“æœ?务器是 MySQL,则是å?¦ä½¿ç”¨ JDBC 是å?¯é€‰çš„。

    当选中该å¤?选框时,IDE会å?‘ environment.rb 文件中添加语å?¥ï¼Œä½¿ç”¨ ActiveRecord-JDBC gem。

    注æ„?:è¦?使用 JDBC 连接,必须获å?–所用数æ?®åº“æœ?务器的 JDBC 3.0 客户端驱动程åº?,并将该 JDBC 驱动程åº?的一份拷è´?放置在 JRuby/lib 文件夹中。
  6. 点击“完æˆ?â€?。
  7. 在“项目â€?窗å?£ä¸­æ£€æŸ¥æ–‡ä»¶ç»“构的逻辑视图。
  8. �键点击项目节点(项目的根节点),留���选项。
  9. 点击“文件â€?选项å?¡ï¼Œæ¯”较一下此物ç?†æ–‡ä»¶ç»“构和“项目â€?窗å?£ä¸­æ˜¾ç¤ºçš„逻辑视图。

    下图将窗å?£åˆ†åˆ—出æ?¥ï¼Œä¾¿äºŽä¸¤ä¸ªè§†å›¾çš„对比。

    图 11:“项目â€?窗å?£ä¸Žâ€œæ–‡ä»¶â€?窗å?£çš„æ¯”较

    “项目â€?窗å?£ä¸Žâ€œæ–‡ä»¶â€?窗å?£çš„æ¯”较
  10. 在“文件â€?窗å?£ä¸­å?³é”®ç‚¹å‡»é¡¹ç›®èŠ‚ç‚¹ï¼Œä¸Žâ€œé¡¹ç›®â€?窗å?£ä¸­çš„弹出è?œå?•相比较,留æ„?è?œå?•选项的ä¸?å?Œã€‚ 例如,“项目â€?窗å?£ä¸­é¡¹ç›®èŠ‚ç‚¹çš„å¼¹å‡ºè?œå?•æ??供了“生æˆ?â€?动作ã€?“è¿?行 Rake 任务â€?动作ã€?“Rails 控制å?°â€?动作,以å?Šè®¸å¤šå…¶ä»– Rails 相关的动作。

使用 Ruby on Rails 文件


除了 Ruby 项目,NetBeans Ruby 支æŒ?也能æ“?作 Ruby on Rails 项目。Rails 是一ç§?å…?许快速创建以数æ?®åº“为å?Žç«¯ã€?基于模型-视图-控制器(MVC)结构的 Web 应用程åº?的框架。

和 Ruby 项目一样,在编辑器中打开文件å?¯ä»¥é€šè¿‡åœ¨â€œé¡¹ç›®â€?窗å?£æˆ–者“文件â€?窗å?£ä¸­å?Œå‡»æ–‡ä»¶èŠ‚ç‚¹ï¼Œæˆ–è€…é€šè¿‡æŒ‰ä¸‹â€œAlt-Shift-Oâ€?组å?ˆé”®ï¼ˆåœ¨ Mac 中请使用“Ctrl-Shift-Oâ€?组å?ˆé”®ï¼‰ä½¿ç”¨æ–‡ä»¶å??访问文件。

“项目â€?窗å?£ä¸­èŠ‚ç‚¹çš„å¼¹å‡ºè?œå?•æ??供了 Rails 脚本和 Rake 任务的便利访问,如用于生æˆ?代ç ?的 generate 脚本ã€?用于将数æ?®åº“表è¿?移至特定版本的 db:migrate 任务。

IDE 能够ç?†è§£æ–‡ä»¶ç±»åž‹ä¹‹é—´çš„关系,而且能方便的导航至相关文件。例如,如果您正在编辑一个视图文件,您å?¯ä»¥ä½¿ç”¨å¼¹å‡ºè?œå?•导航至其相关的动作文件或者测试。

与所有 NetBeans 项目一样,å?¯ä»¥é€šè¿‡ç‚¹å‡»â€œè¿?行主项目â€?按钮æ?¥è¿?行应用程åº?。IDE 会ä¿?存所有文件改动,如必è¦?的è¯?å?¯åЍ web æœ?务器,然å?Žåœ¨æµ?览器中显示欢迎页é?¢ã€‚您也å?¯ä»¥ä½¿ç”¨ç¼–辑器中的“è¿?行文件â€?è?œå?•动作以相关的 URL 在æµ?览器中打开您正在编辑的无论控制器ã€?动作ã€?视图或是帮助文件。

试试看

完æˆ?下列步骤æ?¥åˆ›å»ºåœ¨ä½¿ç”¨ Ruby 文件一节中所展示的样例项目的 Rails 版本。在此å?˜ä½“中,构造函数将使用散列而ä¸?是ä½?ç½®å?‚数,获å?–æ•°æ?®æ˜¯ä»Ž YAML 文件中,而且 Item 类中 ItemsList 功能被删除掉了。

注æ„?:典型的,在 Rails 项目中,模型类是基于数æ?®åº“表的。然而,为了让此样例快速且简å?•,应用程åº?将从一个 YAML 文件中获å?–æ•°æ?®ã€‚

创建模型类

  1. 创建一个 Ruby on Rails 项目,或者使用您在å‰?一节中所创建的那个。
  2. 在“项目â€?窗å?£ä¸­ï¼Œå?³é”®ç‚¹å‡»â€œæ¨¡åž‹â€?节点,然å?Žåœ¨å¼¹å‡ºè?œå?•中选择“生æˆ?â€?。

    “Rails 生æˆ?器â€?对è¯?框将被打开,在“生æˆ?â€?下拉列表中选择“模型â€?,如下图所示。

    图 12:从“模型â€?节点调用的“Rails 生æˆ?器â€?

    从“模型â€?节点调用的“Rails 生æˆ?器â€?
  3. 在“å?‚æ•°â€?文本框中键入 Item,然å?Žç‚¹å‡»â€œå®Œæˆ?â€?。

    IDE 会创建一个å??为 item.rb 的文件,并在编辑器中将其打开。 表示改文件的节点会出现在“项目â€?窗å?£ä¸­çš„“模型â€?节点下。IDE 会å?Œæ—¶åœ¨â€œå?•元测试â€?下创建一个测试套件ã€?在“测试套件(Fixture)â€?下创建一个测试套件ã€?以å?Šåœ¨â€œæ•°æ?®åº“è¿?ç§»â€?->“è¿?ç§»â€?下创建一个è¿?移。
  4. 用下列代ç ?替æ?¢ item.rb 文件的内容。

    代ç ?示例 6:Item ç±»
    # Takes:
    #   :id => unique item id
    #   :type => type of item
    #   :price => price of the item
    
    class Item
      DATA_FILE="data.yml"
      attr_accessor :id, :type, :price
    
      def initialize(attributes)
        @id = attributes['id']
        @type = attributes['type']
        @price = attributes['price'].to_f
      end
    
      def to_s
        "Item #{@id} is a #{@type}: Price $#{@price}"
      end
    
      def self.load_item_data
        YAML.load_file(DATA_FILE).collect do |item_hash|
          Item.new(item_hash)
        end
      end
    
    end

创建数æ?®æ–‡ä»¶

  1. Item ç±»è¦?求 data.yml 文件作为其数æ?®ã€‚è¦?创建该文件,在“项目â€?窗å?£ä¸­ï¼Œå?³é”®ç‚¹å‡»é¡¹ç›®èŠ‚ç‚¹ï¼Œåœ¨å¼¹å‡ºè?œå?•中选择“新建â€?->“其他â€?。
  2. 在“新建文件â€?对è¯?框中,在“类别â€?é?¢æ?¿ä¸­é€‰ä¸­â€œRubyâ€?,在“文件类型â€?é?¢æ?¿ä¸­é€‰ä¸­â€œYAML 文件â€?,点击“下一步â€?。
  3. 在“文件å??â€?文本框中键入 data,点击“完æˆ?â€?。

    IDE 将在项目的根文件夹下创建一个å??为 data.yml 的文件,并在编辑器中将其打开。由于该文件ä½?于根文件夹下,故无法在“项目â€?窗å?£çš„逻辑视图中看到它。ä¸?过,它还是会出现在“文件â€?窗å?£ä¸­ã€‚
  4. 用下列文本替æ?¢ data.yml 文件的内容。

    代ç ?示例 7: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

创建控制器和视图

  1. 模型已ç»?准备好了。现在æ?¥æ·»åŠ æŽ§åˆ¶å™¨å’Œè§†å›¾ã€‚åœ¨â€œé¡¹ç›®â€?窗å?£ä¸­ï¼Œå?³é”®ç‚¹å‡»â€œæŽ§åˆ¶å™¨â€?节点,然å?Žåœ¨å¼¹å‡ºè?œå?•中选择“生æˆ?â€?。

    “Rails 生æˆ?器â€?对è¯?框将被打开,在“生æˆ?â€?下拉列表中选择“控制器â€?,如下图所示。

    图 13:从“控制器â€?节点调用的“Rails 生æˆ?器â€?

    从“控制器â€?节点调用的“Rails 生æˆ?器â€?
  2. 在“å??ç§°â€?文本框中键入 Item,在“视图â€?文本框中键入 index,点击“确定â€?。

    IDE 将创建ItemController 类,并在“视图â€?->“itemâ€?下创建 index.rhtml 视图。此外,IDE 还会创建“功能测试â€?->“item_controller_test_rbâ€?和“帮助â€?->“item_helper.rbâ€?。
  3. 用下列代ç ?替æ?¢ item_controller.rb 文件的内容。

    代ç ?示例 8:ItemController ç±»
    class ItemController < ApplicationController
      def index
        @items = Item.load_item_data
      end
    end

    控制器在调用 index 视图å‰?所调用的 index 动作,使用æ?¡ç›®åˆ—表æ?¥å¡«å…… @items 全局数组。
  4. è¦?快速访问 index.rhtml 文件,在 index 定义中å?³é”®ç‚¹å‡»ï¼Œåœ¨å¼¹å‡ºè?œå?•中选择“导航â€?->“转至 Rails 动作â€?或“转至 Rails 视图â€?,如下图所示。

    图 14:导航至视图

    导航至视图
  5. 使用如下标记替æ?¢ index.rhtml 文件的内容。

    代ç ?示例 9:index.rhtml
    <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 class="align-right"><%= '%.02f' % item.price %></td>
        </tr>
      <% end %>
    </table>

    嵌在 HTML 中 Ruby 代ç ?会é??历由控制器中的 index 动作所定义的 @items 全局数组。

è¿?行应用程åº?

  1. 点击主工具æ ?中的“全部ä¿?存â€?按钮æ?¥ä¿?存全部改动。

    在文件选项å?¡å¤´éƒ¨æ–‡ä»¶å??处的星å?·ï¼ˆ*),表示文件有改动,现在会消失了。
  2. 在编辑器中å?•击鼠标å?³é”®ï¼Œç„¶å?Žé€‰æ‹©â€œè¿?行文件â€?。

    IDE 把 item 控制器和 index 动作的 URL å?‘é€?至æœ?务器,æœ?务器å†?将下列页é?¢å?‘é€?至æµ?览器。

    图 15:æµ?览器中显示的 index 视图

    æµ?览器中显示的 index 视图
  3. å?¯ä»¥è¯•ç?€ç‚¹å‡»â€œè¿?行主项目â€?æ?¥è¿?行整个应用程åº?。

    会å?‘现标准的 Ruby on Rails 欢迎页é?¢å°†è¢«æ˜¾ç¤ºå‡ºæ?¥ã€‚这是由于路由器默认显示“Publicâ€?->“index.htmlâ€?文件。å?Žé?¢çš„æ­¥éª¤å°†ä¼šæ›´æ”¹è·¯ç”±é€‰æ‹©ã€‚
  4. 在“项目â€?窗å?£ä¸­æ‰©å±•“Publicâ€?。
  5. å?³é”®ç‚¹å‡»â€œindex.htmlâ€?节点,然å?Žåœ¨å¼¹å‡ºè?œå?•中选择“删除â€?。
  6. 在“项目â€?窗å?£ä¸­æ‰©å±•“é…?ç½®â€?节点,å?Œå‡»â€œroutes.rbâ€?,将其在编辑器中打开。
  7. 查找以下注释:
      # map.connect '', :controller => "welcome"

    使用如下粗体所示的代ç ?替æ?¢è¯¥æ³¨é‡Šã€‚

    代ç ?示例 10:路由选择代ç ?
      # You can have the root of your site routed by hooking up ''
      # -- just remember to delete public/index.html.
      map.connect '', :controller => "item"
  8. 为了确ä¿?路由选择的改动能被æœ?务器所采用,点击 IDE å?³ä¸‹è§’çš„æœ?务器å?œæ­¢æŒ‰é’®ï¼Œå¦‚下图所示。

    图 16:æœ?务器å?œæ­¢æŒ‰é’®

    æœ?务器å?œæ­¢æŒ‰é’®
  9. 点击“è¿?行主项目â€?以在æµ?览器中å?¯åŠ¨åº”ç”¨ç¨‹åº?。

练习所学知识

  1. 现在试ç?€ä»Žå¤´å¼€å§‹æž„建一个项目。创建一个 Ruby on Rails 项目能在任务列表中显示æ?¡ç›®ã€‚
  2. å?¯ä»¥å?‚考与 JRuby 一起使用数æ?®åº“å’Œ 10 分钟创建 Ruby Weblog。

    若使用数æ?®åº“表代替文件,那怎样æ?¥æž„建任务列表应用程åº?呢?

更多信æ?¯

  • å?‚è§? NetBeans Ruby 文档索引,获å?–视频演示和教程。
  • Ruby on Rails web 站点包å?«ä¸°å¯Œçš„视频ã€?展示ã€?教程ã€?å?Šç¤ºä¾‹å†…容。
  • å?¯ä»¥ä½¿ç”¨â€œæ?’ä»¶â€?工具下载和安装 Ruby Depot 样例应用程åº?(å?¯èƒ½æ‚¨æ‰€ä½¿ç”¨çš„ IDE 版本已ç»?将其安装了)。æ?’件安装å?Žï¼Œåœ¨â€œé¡¹ç›®â€?窗å?£ä¸­å?•击鼠标å?³é”®ï¼Œåœ¨å¼¹å‡ºè?œå?•中选择“新建项目â€?。扩展“类别â€?é?¢æ?¿ä¸­â€œæ ·ä¾‹â€?节点,选中“Rubyâ€?。选择“Depotâ€?,并点击“下一步â€?。点击“完æˆ?â€?,并é?µç…§æµ?览器中所显示的自述文件(README)中给出的指导说明。

使用 JRuby Interactive Ruby(IRB)控制å?°


正如您所猜测的 JRuby Interactive Ruby(IRB)控制å?°æ˜¯ä¸€ä¸ªèƒ½è®©æ‚¨äº¤äº’输入 Ruby 语å?¥çš„æ¨¡å?—,与使用 Ruby IRB 所å?šçš„一样。此外,JRuby Interactive Ruby(IRB)控制å?°è¿˜æ??供了与 Java å¹³å?°åº”用程åº?之间的互æ“?作性。

å?¯åœ¨ä¸»è?œå?•中选择“窗å?£â€?->“其他â€?->“Ruby Shell (IRB)â€?æ?¥æ‰“开控制å?°ã€‚控制å?°ä¼šåœ¨ IDE 的下部出现,如下图所示。

图 17:JRuby IRB 控制å?°

IRB 控制å?°

IRB 控制å?°æ˜¯ä»Ž NetBeans 安装文件夹下å?¯åŠ¨çš„ã€‚è¦?切æ?¢è‡³å?¦ä¸€ä¸ªæ–‡ä»¶å¤¹ï¼Œé”®å…¥å¦‚下命令,将 your-path 替æ?¢æˆ?指å?‘包å?« Ruby 文件的文件夹的路径。

  => Dir.chdir("your-path")

关闭“控制å?°â€?窗å?£ä¸?会å?œæ­¢ IRB 会è¯?。当您é‡?新打开该窗å?£ï¼Œå‘½ä»¤åކå?²è®°å½•会ä¾?然显示。 è¦?å?œæ­¢ä¼šè¯?,在控制å?°ä¸­é”®å…¥ quit 或者 exit。

试试看
  1. 在主è?œå?•中,选择“窗å?£â€?->“其他â€?->“Ruby Shell (IRB)â€?æ?¥æ‰“å¼€ IRB 控制å?°ã€‚
  2. 键入一些 Ruby 常é‡?æ?¥ç†Ÿæ‚‰ä¸€ä¸‹çŽ¯å¢ƒï¼Œä¾‹å¦‚ PLATFORMã€?VERSIONã€?ENV_JAVAã€?ENV。键入 Object::contants æ?¥æŸ¥çœ‹æ‰€æœ‰é¡¶çº§å¸¸é‡?。
  3. 使用 IRB 试用 Ruby 语å?¥ä¾‹å¦‚,键入下列语å?¥ï¼Œçœ‹ä¸€ä¸‹ Ruby 会有什么样的输出:

    >> String.ancestors
    >> "fig mango orange melon grapes".split(pattern="\s")
    >> "users@ruby.netbeans.org" =~ /\A[\w\._%-]+@[\w\.-]+\.[a-zA-Z]{2,4}\z/

    试ç?€æƒ³æƒ³å…¶ä»–您å?¯èƒ½æƒ³è¦?试验的 Ruby 语å?¥ï¼Œæ¯”如查看抛出异常的类型。

  4. 体验一下代ç ?补全弹出è?œå?•的特性。键入最åˆ?几个字符,然å?ŽæŒ‰ä¸‹â€œTabâ€?键,å?¯ä»¥çœ‹åˆ°ä¸€ä¸ªå»ºè®®åˆ—表,如下图所示。您å?¯ä»¥ç»§ç»­è¾“入,以缩短该列表。 选择所需选项,按下“Enterâ€?键。

    图 18:代ç ?补全弹出è?œå?•

    代ç ?补全弹出è?œå?•
  5. 按几下“å?‘上箭头â€?滚动命令历å?²è®°å½•,然å?ŽæŒ‰â€œå?‘下箭头â€?å?‘下滚动。按下“Enterâ€?键,é‡?新执行一æ?¡å‘½ä»¤ã€‚

更多信æ?¯

更多内容




>> 更多 Ruby 文档

Bookmark this page

del.icio.us furl simpy slashdot technorati digg
Companion
Projects:
MySQL Database Server   Open JDK: an Open SourceJDK   GlassFish Community: an Open Source Application Server    Mobile & Embedded Community    Open Solaris   java.net - The Source for Java Technology Collaboration   Open ESB - The Open Enterprise Service Bus Powered by