让我们创建一个博客
对于许多人来说,真正“将它们吸引到” Ruby On Rails 的一件事是由 Rails 创建者 David Heinemeier Hansson 提供的二十分钟演示,其中他演示了如何创建一个简单的博客。
http://www.rubyonrails.com/screencasts
博客是一种来展示使用 Rails 创建相当复杂的应用程序是多么容易的很好的方式。在本章的最后一部分中,我将解释如何创建一个非常简单的博客(Blog)应用程序。我将使用一个名为 “migrations”(迁移)的功能,它将减少创建“模型”(Model)数据库结构的大量工作。
请记住,我已尽力使这个应用程序的创建尽可能简单,并且它不具备功能齐全的博客的所有功能(例如,没有用户注释和管理界面)。完成我的基本博客应用程序后,你可能想要学习前面提到的截屏教程。这将带你进一步创建更复杂的博客。
在保存 Rails 应用程序的目录中打开命令提示符(例如 C:\railsapps)并执行命令以创建名为 Blog 的应用程序:
rails blog
创建数据库
现在让我们创建一个数据库。再一次,我假设你正在使用 MySQL 数据库。打开 MySQL 提示符(如前所述,从 MySQL 程序组打开 MySQL 命令行客户端)。出现提示时输入你的 MySQL 密码。现在你应该看到提示:
mysql>
在提示符处输入此内容(请记住结尾处的分号):
create database blog_development;
MySQL 应该回复“查询确定”(Query OK)以确认已创建。现在确保 Rails 应用程序的数据库配置文件包含开发数据库的相应配置。如果你使用的是其它数据库(而不是 MySQL),则配置条目必须引用该数据库。
打开 \app\config\database.yml。假设你正在使用 MySQL,请输入‘mysql’作为适配器,‘localhost’作为主机,输入你的 MySQL 用户名(例如‘root’)和密码(如果有)。数据库名称应与你刚刚创建的数据库匹配。这是一个示例:
development:
adapter: mysql
host: localhost
username: root
database: blog_development
password: mypassword
脚手架
我们将使用一个名为 “scaffolding”(脚手架)的功能来一次创建模型,视图和控制器。脚手架是一种快速启动和运行简单应用程序的便捷方式。进入新的 \blog 目录并在系统提示符下输入以下内容:
ruby script/generate scaffold post title:string body:text created_at:datetime
这告诉脚手架生成器创建一个包含 Ruby 代码的模型来访问一个名为 ‘post’ 的数据库表,其中有三列,’title’,’body’ 和 ‘created_at’,每个列都有数据类型(字符串,文本和日期时间)在冒号后指定。
为了基于此模型创建数据库结构,我们需要运行 “migration” 来更新数据库表本身。
迁移
scaffold 脚本为我们创建了一个数据库迁移(migration)文件。导航到 \db\migrate 目录。你将看到它包含一个带编号的迁移文件,其名称以 _create_posts.rb 结尾。如果打开此文件,你可以看到如何在 Ruby 代码中表示表结构:
def self.up
create_table :posts do |t|
t.string :title
t.text :body
t.datetime :created_at
t.timestamps
end
end
随着时间的推移,应用程序可能会获得大量迁移文件,每个迁移文件都包含有关模型特定迭代的信息 - 对数据库表结构所做的更改和添加。经验丰富的 Rails 开发人员可以有选择地使用迁移来激活不同版本的模型。但是,在这里,我们将使用此迁移来创建数据库的初始结构。在应用程序主目录(例如 /blog)中的系统提示符下,你可以使用 “rake” 工具运行迁移。输入以下命令:
rake db:migrate
片刻之后,你应该看到一条消息,指出 rake 任务已完成并且 CreatePosts 已被迁移。
Partial
现在让我们创建一个新的 “partial” 视图模板。Partial 是网页模板的片段,Rails 可以在运行时将其插入到一个或多个完整的网页中。
例如,如果你计划在站点的多个页面中使用相同的数据输入表单,则可以在 partial 模板中创建该表单。partial 模板的名称以下划线开头。
在 \app\views\posts\directory 目录中创建一个名为 _post.html.erb 的新文件。打开此文件并编辑其内容以匹配以下内容:
<div>
<h2><%= link_to post.title, :action => 'show', :id => post %></h2>
<p><%= post.body %></p>
<p><small>
<%= post.created_at.to_s %>
</small></p>
</div>
保存更改。然后打开名为 show.html.erb 的文件。此文件由脚手架脚本自动创建。从文件中删除以下“样板”(boilerplate)代码…
<b>Title:</b>
<%=h @post.title %>
</p>
<p>
<b>Body:</b>
<%=h @post.body %>
</p>
<p>
<b>Created at:</b>
<%=h @post.created_at %>
</p>
并用这些替换它…
<%= render :partial => "post", :object => @post %>
这告诉 Rails 此时渲染 _post 局部模板。show.html.erb 中的代码现在应该如下所示…
<%= render :partial => "post", :object => @post %>
<%= link_to 'Edit', edit_post_path(@post) %> |
<%= link_to 'Back', posts_path %>
试一试
就是这样!现在你已准备好测试你的应用程序。首先,运行服务器。在 \blog 目录中的提示符下,输入:
ruby script/server
-p
之后指定实际端口号,如本章前面所述。 例如:ruby script/server -p3003
进入你的 Web 浏览器并输入以下地址(如果不是 3000,请再次使用实际端口号):
你应该看到你的页面的 index 页面处于活动状态。这是应该出现的…
现在单击 New Post 链接。在“新建帖子”页面中,输入标题和正文。然后单击 Create。
显示的下一页是“显示页面”。这是由 show.html.erb 视图和 _post.html.erb 部分组合定义的。现在继续输入帖子并单击链接以浏览各种已定义的视图…