corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

10 分钟内创建一个 Ruby 博客程序

Brian Leonard 创建,由 Chris Kutler 维护
2008
年 4 月[修订号:V6.1-1]

在本教程中,我将利用 NetBeans IDE 对 Ruby 的支持创建并运行一个简单的数据库 Web 应用程序。通过完成本教程中的步骤,您将学习如何执行以下任务:

  • 使用 Rake 任务和迁移文件创建和更新数据库表

  • 使用 Scaffold 生成程序生成基本的创建、读取、更新和删除(CRUD)数据库 Web 应用程序

  • 编译视图,调优 Web 页面

目录

此页面上的内容适用于 NetBeans IDE 6.1

要完成本教程,您需要以下软件。

软件或资源

所需版本

具备 Ruby 支持 的 NetBeans IDE

版本 6.1

MySQL 数据库服务器

版本 5.0

创建 Ruby on Rails 项目

首先,创建一个 Ruby on Rails 项目。默认情况下,Ruby on Rails 应用程序将创建在符合项目约定的目录结构中。

  1. 在 NetBeans IDE 中,选择“文件”>“新建项目”。

  2. 从“类别”列表中选择“Ruby”,从“项目”列表中选择“Ruby on Rails”应用程序,如下图所示。

    在新建项目向导中选择 Ruby on Rails 项目类型

  3. 单击“下一步”按钮,为项目命名并指定位置。

  4. 在“项目名称”文本框中键入 rubyWeblog,如下图所示。

    接受此页面上的所有其他默认设置。

    在“名称和位置”面板中将项目名称设置为 rubyWeblog

  5. 如果满足以下条件,请直接跳到步骤 8。

    • 您正使用默认的 root 用户名

    • root 不需要密码

    • 您正使用 MySQL 数据库服务器

    IDE 默认假定这些条件。

  6. 单击“下一步”按钮配置数据库。

  7. 选择“直接指定数据库信息”选项,选择“数据库适配器”,键入用户名和密码。保留“数据库名称”为空。

  8. 单击“完成”按钮创建一个新项目。

    IDE 将创建一个与您项目同名的项目目录,并在编辑区域打开 database.yml 文件。注意,开发配置默认的数据库名称是 rubyWeblog_development

  9. 验证开发部分的适配器、数据库、用户名和密码设置是否正确,然后单击 database.yml 选项卡中的小 x 按钮关闭文件。

    database.yml 文件

创建 Scaffold

此 Weblog 应用程序是置疑 Post 模型创建的,其中存储博客帖子实例。现在,我们将使用 Rails Scaffold 生成程序创建模型及其控制器,以及索引(列表)、显示、新建和编辑视图。

生成程序还将创建一个用于创建模型的数据库表的迁移文件,并为编写模型测试创建单元测试和固定桩。

  1. 在“项目”窗口中,右键单击 rubyWeblog 项目节点并选择“生成”,如下图所示。

    从弹出菜单中选择生成操作

  2. 在“Rails 生成程序”对话框中,从“生成”下拉列表中选择“Scaffold”,如下图所示。

    从生成下拉列表中选择 Scaffold

  3. 在“模型名称”文本框中键入 Post

  4. 在“属性对”文本框中键入 title:string 并单击“确定”按钮。

    “输出”窗口将列出 Scaffold 生成程序创建和更新的文件列表。

创建数据库

在本节中,我们将使用 Rake 任务创建 rubyWeblog_development 数据库。然后,使用 001_create_posts.rb 迁移文件将帖子添加到数据库中。

  1. 在“项目”窗口中,右键单击 rubyWeblog 项目节点,从弹出菜单中选择“运行 Rake 任务”> “db” >“创建”。

    从弹出菜单中选择创建

    Rake 将针对 database.yml 文件中定义的开发配置创建数据库。

    注意:如果在“输出”窗口中看到错误消息,请验证 database.yml 文件的开发部分的用户名和密码正确无误。同样,验证数据库服务器正在运行。

  2. 在“项目”窗口中,依次展开“数据库迁移”和“迁移”节点。

  3. 双击 001_create_posts.rb 节点在编辑区域中打开它,如下图所示。

    双击 001_create_posts.rb 节点

    打开的文件中含有一个 self.up 方法,用于创建 posts 表,和一个 self.down 方法,用于销毁 posts 表,如以下代码示例所示。

    class CreatePosts < ActiveRecord::Migration
     def self.up
     create_table :posts do |t|
     t.string :title
    
     t.timestamps
     end
     end
    
     def self.down
     drop_table :posts
     end
    end

    注意,create_table 方法默认将添加一个 id 栏,timestamps 方法将在数据库表中添加 created_atupdated_at 栏。

  4. 在“项目”窗口中,右键单击“rubyWeblog”节点并选择“迁移数据库”>“至当前版本”,如下图所示。

    迁移数据库

    此操作将在数据库中添加 posts 表。“输出”窗口将指示迁移完成,如下图所示。

    输出窗口中的迁移消息

运行应用程序

接下来,测试应用程序。

  1. 在“项目”窗口中,展开“配置节点”,双击 routes.rb 在编辑器中打开它。

  2. 找到下面这行代码:

    # map.root :controller => "welcome"
  3. 删除它并将 controller 修改为 "posts",如下所示。

    map.root :controller => "posts"
  4. 在“项目”窗口中,展开“公共”节点,右键单击 index.html,然后从弹出菜单中选择“删除”。

    index.html 页面将显示默认的欢迎页面,而这并不是您想要的。通过删除 index.html,Rails 将在 routes.rb 中寻找需要显示的页面。

  5. 从主菜单中选择“文件”> “保存所有”。

  6. 单击工具栏中的“运行主项目”按钮。

    运行主项目按钮

    此操作将启动 WEBrick 服务器,它是 Ruby on Rails 框架(使用 Ruby 编写)的一部分。同时将启动 Web 浏览器。下图是该应用程序的初始页面。

    Web 浏览器中的项目

    注意:您可以配置项目使用不同的服务器。如果您使用 WEBrick 之外的服务器,那么可能需要在浏览器的地址栏中输入 http://localhost:3000/posts 并按下回车键。

  7. 单击“新建”链接显示应用程序的第二个页面,如下图所示。

    应用程序在浏览器的第二个页面

  8. 输入一个标题,然后单击“创建”按钮

    下图就是创建博客日志的一个例子。

    示例博客帖子

  9. 单击“返回”链接可返回帖子列表。

添加另一个表栏

现在,我们将再添加一个字段(除了Title字段之外),从而使 posts 表包含一个 Body 栏,用于提供博客的正文内容。

  1. 右键单击“数据库迁移”节点,并从弹出菜单中选择“生成”。

    从弹出菜单中选择生成

    这将打开“Rails 生成程序”对话框,它已经在“生成”下拉列表中选择了迁移。

  2. 在“参数”文本框中输入 AddBodyToPost body:text,如下图所示。

    生成迁移对话框

  3. 单击“确定”。

    IDE 将创建一个迁移脚本版本文件 002_add_body_to_post.rb,并在编辑域中打开该文件。文件的 self.up 方法中添加了一个 body 栏和 self.down 栏,如以下代码所示。注意生成代码是如何从第一个参数 AddBodyToPost 中提取出表名的。

    class AddBodyToPost < ActiveRecord::Migration
     def self.up
     add_column :posts, :body, :text
     end
    
     def self.down
     remove_column :posts, :body
     end
    end
  4. 右键单击“RubyWebLog”节点,从弹出菜单中选择“迁移数据库”>“至当前版本”。

    或者,在源文件中单击鼠标右键并从弹出菜单中选择“运行”。

  5. 在“项目”窗口中,展开“视图”节点,展开帖子,双击 edit.html.erb 在编辑区域打开它。

  6. 将以下代码示例中的粗体语句添加到 edit.html.erb 文件中。

    或者,将光标放在 Title 的 <p> 标记前面,再将光标拖动到段落结束 </p> 标记后。然后,按 Ctrl+Shift+向下箭头复制行。将 Title 替换为 Body 并将 f.text_field :title 替换为 f.text_area :body

    <h1>Editing post</h1>
    
    <%= error_messages_for :post %>
    
    <% form_for(@post) do |f| %>
     <p>
     <b>Title</b><br />
     <%= f.text_field :title %>
     </p>
    
     <p>
     <b>Body</b><br />
     <%= f.text_area :body %>
     </p>
    
     <p>
     <%= f.submit "Update" %>
     </p>
    <% end %>
    
    <%= link_to 'Show', @post %> |
    <%= link_to 'Back', posts_path %>
  7. 双击 new.html.erb 在编译区域打开该文件。

  8. 将以下代码示例中的粗体部分添加到 new.html.erb 文件中。或者,使用 Ctrl+Shift+向下箭头复制 Title 段落并编辑复制代码,如步骤 6 所示。

    <h1>New post</h1>
    
    <%= error_messages_for :post %>
    
    <% form_for(@post) do |f| %>
     <p>
     <b>Title</b><br />
     <%= f.text_field :title %>
     </p>
    
     <p>
     <b>Body</b><br />
     <%= f.text_area :body %>
     </p>
    
     <p>
     <%= f.submit "Create" %>
     </p>
    <% end %>
    
    <%= link_to 'Back', posts_path %>
  9. 双击 show.html.erb 在编辑区域打开该文件。

  10. 将以下代码示例中的粗体部分添加到 show.html.erb 文件中。或者,使用 Ctrl+Shift+向下箭头复制 Title 段落并编辑复制代码,如步骤 6 所示。将 Title: 更换为 Body:,并将 @post.title 更换为 @post.body

    <p>
     <b>Title:</b>
     <%=h @post.title %>
    </p>
    
    <p>
     <b>Body:</b>
     <%=h @post.body %>
    </p>
    
    <%= link_to 'Edit', edit_post_path(@post) %> |
    <%= link_to 'Back', posts_path %>
  11. 从主菜单中选择“文件”>“保存所有”。

  12. 返回浏览器并单击“新建帖子”链接查看新 body 栏,如下图所示。

    含有正文的新帖子

  13. 创建更多的博客条目。

    完成之后,单击“返回”按钮可返回“帖子列表”页面。

验证输入

现在,我们将在 Post 类中添加一些代码,确保用户为标题和正文提供适当的值。

  1. 在“项目”窗口中,展开“模型”节点并双击 post.rb 在编辑器中打开它。

  2. 在类定义中创建一个新行,键入 vp 并按 Tab 键。

    IDE 将 vp 触发器替换为以下参数化的代码模板。

    validates_presence_of :attribute
  3. 键入 title, :body,然后按下回车键。代码应如下所示。

    validates_presence_of :title, :body
  4. 保存文件,返回浏览器,单击“新建帖子”并单击“创建”。

    现在,应用程序将报告标题和正文不能为空。

    出错:缺少标题和正文

使列表看起来更像是一个博客

现在,我们将编辑 index.html 视图,使列表看起来更像是一个博客,如下图所示。

经过修订的博客页面

  1. 在“项目”窗口中,展开“视图”节点,展开帖子,双击 edit.html.erb 在编辑区域打开它。

    此视图显示了博客条目列表。

  2. 删除 <h1><table> 元素,并将它们替换为下面的粗体代码。

    <h1>The Ruby Blog</h1>
    <% for post in @posts %>
     <h2><%= post.title %></h2>
     <p><%= post.body %></p>
     <small>
     <%= link_to "permalink", 
     :action => "show", 
     :id => post %>
     </small>
     <hr>
    <% end %>
    
    <br />
    
    <%= link_to 'New post', new_post_path %>

    对于 post 操作的各实例,此代码将生成标题、正文和 Permalink。

  3. 保存更改并运行应用程序,查看 Post 模型的新界面。

  4. 要将最新条目显示在博客最前面,请编辑您刚才添加的代码,添加一个 .reverse 方法反转排序顺序,如下所示。

    <% for post in @posts.reverse %>
  5. 保存文件并刷新您的浏览器,查看反序排序的列表。

学以致用

使用您在本练习中学到的技巧创建一个任务列表 Web 项目。使用 Scaffold 生成程序围绕 Task 模型构建一个含 title:stringdescription:text 字段的 Scaffold。使用 Rake 创建数据库,然后使用“数据库迁移”创建表。不要忘记编辑 route.rb 文件与 root 建立映射,并删除 index.html 文件。

未来计划





>> 更多 NetBeans Ruby 文档

将反馈发送给我们


Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems