10
分钟内创建一个
Ruby
博客程序
由 Brian
Leonard 创建,由
Chris
Kutler 维护
2008
年 4
月[修订号:V6.1-1]
在本教程中,我将利用 NetBeans
IDE 对 Ruby
的支持创建并运行一个简单的数据库
Web
应用程序。通过完成本教程中的步骤,您将学习如何执行以下任务:
目录
要完成本教程,您需要以下软件。
创建 Ruby
on Rails 项目
首先,创建一个 Ruby
on Rails 项目。默认情况下,Ruby
on Rails 应用程序将创建在符合项目约定的目录结构中。
在 NetBeans
IDE 中,选择“文件”>“新建项目”。
从“类别”列表中选择“Ruby”,从“项目”列表中选择“Ruby
on Rails”应用程序,如下图所示。
单击“下一步”按钮,为项目命名并指定位置。
在“项目名称”文本框中键入
rubyWeblog,如下图所示。
接受此页面上的所有其他默认设置。
如果满足以下条件,请直接跳到步骤 8。
您正使用默认的
root
用户名
root
不需要密码
您正使用 MySQL
数据库服务器
IDE
默认假定这些条件。
单击“下一步”按钮配置数据库。
选择“直接指定数据库信息”选项,选择“数据库适配器”,键入用户名和密码。保留“数据库名称”为空。
单击“完成”按钮创建一个新项目。
IDE
将创建一个与您项目同名的项目目录,并在编辑区域打开
database.yml
文件。注意,开发配置默认的数据库名称是
rubyWeblog_development。
验证开发部分的适配器、数据库、用户名和密码设置是否正确,然后单击
database.yml
选项卡中的小 x
按钮关闭文件。
创建
Scaffold
此 Weblog
应用程序是置疑 Post
模型创建的,其中存储博客帖子实例。现在,我们将使用
Rails
Scaffold 生成程序创建模型及其控制器,以及索引(列表)、显示、新建和编辑视图。
生成程序还将创建一个用于创建模型的数据库表的迁移文件,并为编写模型测试创建单元测试和固定桩。
在“项目”窗口中,右键单击
rubyWeblog
项目节点并选择“生成”,如下图所示。
在“Rails
生成程序”对话框中,从“生成”下拉列表中选择“Scaffold”,如下图所示。
在“模型名称”文本框中键入
Post。
在“属性对”文本框中键入
title:string
并单击“确定”按钮。
“输出”窗口将列出 Scaffold
生成程序创建和更新的文件列表。
创建数据库
在本节中,我们将使用 Rake
任务创建
rubyWeblog_development
数据库。然后,使用
001_create_posts.rb
迁移文件将帖子添加到数据库中。
在“项目”窗口中,右键单击
rubyWeblog
项目节点,从弹出菜单中选择“运行
Rake
任务”>
“db” >“创建”。
Rake 将针对
database.yml
文件中定义的开发配置创建数据库。
注意:如果在“输出”窗口中看到错误消息,请验证
database.yml
文件的开发部分的用户名和密码正确无误。同样,验证数据库服务器正在运行。
在“项目”窗口中,依次展开“数据库迁移”和“迁移”节点。
双击 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_at
和 updated_at
栏。
在“项目”窗口中,右键单击“rubyWeblog”节点并选择“迁移数据库”>“至当前版本”,如下图所示。
此操作将在数据库中添加 posts
表。“输出”窗口将指示迁移完成,如下图所示。
运行应用程序
接下来,测试应用程序。
在“项目”窗口中,展开“配置节点”,双击
routes.rb
在编辑器中打开它。
找到下面这行代码:
# map.root :controller => "welcome"
删除它并将 controller
修改为 "posts",如下所示。
map.root :controller => "posts"
在“项目”窗口中,展开“公共”节点,右键单击
index.html,然后从弹出菜单中选择“删除”。
index.html
页面将显示默认的欢迎页面,而这并不是您想要的。通过删除
index.html,Rails
将在 routes.rb
中寻找需要显示的页面。
从主菜单中选择“文件”>
“保存所有”。
单击工具栏中的“运行主项目”按钮。
此操作将启动 WEBrick
服务器,它是 Ruby
on Rails 框架(使用 Ruby
编写)的一部分。同时将启动
Web
浏览器。下图是该应用程序的初始页面。
注意:您可以配置项目使用不同的服务器。如果您使用
WEBrick
之外的服务器,那么可能需要在浏览器的地址栏中输入
http://localhost:3000/posts
并按下回车键。
单击“新建”链接显示应用程序的第二个页面,如下图所示。
输入一个标题,然后单击“创建”按钮
下图就是创建博客日志的一个例子。
单击“返回”链接可返回帖子列表。
添加另一个表栏
现在,我们将再添加一个字段(除了Title字段之外),从而使
posts 表包含一个
Body
栏,用于提供博客的正文内容。
右键单击“数据库迁移”节点,并从弹出菜单中选择“生成”。
这将打开“Rails
生成程序”对话框,它已经在“生成”下拉列表中选择了迁移。
在“参数”文本框中输入
AddBodyToPost
body:text,如下图所示。
单击“确定”。
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
右键单击“RubyWebLog”节点,从弹出菜单中选择“迁移数据库”>“至当前版本”。
或者,在源文件中单击鼠标右键并从弹出菜单中选择“运行”。
在“项目”窗口中,展开“视图”节点,展开帖子,双击
edit.html.erb
在编辑区域打开它。
将以下代码示例中的粗体语句添加到
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 %>
双击 new.html.erb
在编译区域打开该文件。
将以下代码示例中的粗体部分添加到
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 %>
双击 show.html.erb
在编辑区域打开该文件。
将以下代码示例中的粗体部分添加到
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 %>
从主菜单中选择“文件”>“保存所有”。
返回浏览器并单击“新建帖子”链接查看新
body
栏,如下图所示。
创建更多的博客条目。
完成之后,单击“返回”按钮可返回“帖子列表”页面。
验证输入
现在,我们将在 Post
类中添加一些代码,确保用户为标题和正文提供适当的值。
在“项目”窗口中,展开“模型”节点并双击
post.rb
在编辑器中打开它。
在类定义中创建一个新行,键入 vp
并按 Tab
键。
IDE 将
vp
触发器替换为以下参数化的代码模板。
validates_presence_of :attribute
键入 title,
:body,然后按下回车键。代码应如下所示。
validates_presence_of :title, :body
保存文件,返回浏览器,单击“新建帖子”并单击“创建”。
现在,应用程序将报告标题和正文不能为空。
使列表看起来更像是一个博客
现在,我们将编辑 index.html
视图,使列表看起来更像是一个博客,如下图所示。
在“项目”窗口中,展开“视图”节点,展开帖子,双击
edit.html.erb
在编辑区域打开它。
此视图显示了博客条目列表。
删除 <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。
保存更改并运行应用程序,查看 Post
模型的新界面。
要将最新条目显示在博客最前面,请编辑您刚才添加的代码,添加一个
.reverse
方法反转排序顺序,如下所示。
<% for post in @posts.reverse %>
保存文件并刷新您的浏览器,查看反序排序的列表。
学以致用
使用您在本练习中学到的技巧创建一个任务列表 Web
项目。使用 Scaffold
生成程序围绕 Task
模型构建一个含 title:string
和 description:text
字段的 Scaffold。使用
Rake
创建数据库,然后使用“数据库迁移”创建表。不要忘记编辑
route.rb
文件与 root
建立映射,并删除 index.html
文件。
未来计划
>>
更多
NetBeans
Ruby 文档
将反馈发送给我们