让我们创建一个博客

对于许多人来说,真正“将它们吸引到” Ruby On Rails 的一件事是由 Rails 创建者 David Heinemeier Hansson 提供的二十分钟演示,其中他演示了如何创建一个简单的博客。

  1. http://www.rubyonrails.com/screencasts

博客是一种来展示使用 Rails 创建相当复杂的应用程序是多么容易的很好的方式。在本章的最后一部分中,我将解释如何创建一个非常简单的博客(Blog)应用程序。我将使用一个名为 “migrations”(迁移)的功能,它将减少创建“模型”(Model)数据库结构的大量工作。

请记住,我已尽力使这个应用程序的创建尽可能简单,并且它不具备功能齐全的博客的所有功能(例如,没有用户注释和管理界面)。完成我的基本博客应用程序后,你可能想要学习前面提到的截屏教程。这将带你进一步创建更复杂的博客。

\blog
你可以将博客应用程序的代码与我创建的代码进行比较。这是在本章随附的代码的 \blog 子目录中提供的。但是,这个博客应用程序并不是“就绪状态”,因为它需要一个你必须创建的数据库。不要“按原样”运行它,使用我的博客应用程序作为参考来检查你创建的文件是否与我创建的文件匹配。

在保存 Rails 应用程序的目录中打开命令提示符(例如 C:\railsapps)并执行命令以创建名为 Blog 的应用程序:

  1. rails blog

创建数据库

现在让我们创建一个数据库。再一次,我假设你正在使用 MySQL 数据库。打开 MySQL 提示符(如前所述,从 MySQL 程序组打开 MySQL 命令行客户端)。出现提示时输入你的 MySQL 密码。现在你应该看到提示:

  1. mysql>

在提示符处输入此内容(请记住结尾处的分号):

  1. create database blog_development;

MySQL 应该回复“查询确定”(Query OK)以确认已创建。现在确保 Rails 应用程序的数据库配置文件包含开发数据库的相应配置。如果你使用的是其它数据库(而不是 MySQL),则配置条目必须引用该数据库。

打开 \app\config\database.yml。假设你正在使用 MySQL,请输入‘mysql’作为适配器,‘localhost’作为主机,输入你的 MySQL 用户名(例如‘root’)和密码(如果有)。数据库名称应与你刚刚创建的数据库匹配。这是一个示例:

  1. development:
  2. adapter: mysql
  3. host: localhost
  4. username: root
  5. database: blog_development
  6. password: mypassword
记住:如果在更改 database.yml 时服务器正在运行,你应该在之后重新启动服务器!

脚手架

我们将使用一个名为 “scaffolding”(脚手架)的功能来一次创建模型,视图和控制器。脚手架是一种快速启动和运行简单应用程序的便捷方式。进入新的 \blog 目录并在系统提示符下输入以下内容:

  1. 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 代码中表示表结构:

  1. def self.up
  2. create_table :posts do |t|
  3. t.string :title
  4. t.text :body
  5. t.datetime :created_at
  6. t.timestamps
  7. end
  8. end

随着时间的推移,应用程序可能会获得大量迁移文件,每个迁移文件都包含有关模型特定迭代的信息 - 对数据库表结构所做的更改和添加。经验丰富的 Rails 开发人员可以有选择地使用迁移来激活不同版本的模型。但是,在这里,我们将使用此迁移来创建数据库的初始结构。在应用程序主目录(例如 /blog)中的系统提示符下,你可以使用 “rake” 工具运行迁移。输入以下命令:

  1. rake db:migrate

片刻之后,你应该看到一条消息,指出 rake 任务已完成并且 CreatePosts 已被迁移。

Partial

现在让我们创建一个新的 “partial” 视图模板。Partial 是网页模板的片段,Rails 可以在运行时将其插入到一个或多个完整的网页中。

例如,如果你计划在站点的多个页面中使用相同的数据输入表单,则可以在 partial 模板中创建该表单。partial 模板的名称以下划线开头。

\app\views\posts\directory 目录中创建一个名为 _post.html.erb 的新文件。打开此文件并编辑其内容以匹配以下内容:

  1. <div>
  2. <h2><%= link_to post.title, :action => 'show', :id => post %></h2>
  3. <p><%= post.body %></p>
  4. <p><small>
  5. <%= post.created_at.to_s %>
  6. </small></p>
  7. </div>

保存更改。然后打开名为 show.html.erb 的文件。此文件由脚手架脚本自动创建。从文件中删除以下“样板”(boilerplate)代码…

  1. <b>Title:</b>
  2. <%=h @post.title %>
  3. </p>
  4. <p>
  5. <b>Body:</b>
  6. <%=h @post.body %>
  7. </p>
  8. <p>
  9. <b>Created at:</b>
  10. <%=h @post.created_at %>
  11. </p>

并用这些替换它…

  1. <%= render :partial => "post", :object => @post %>

这告诉 Rails 此时渲染 _post 局部模板。show.html.erb 中的代码现在应该如下所示…

  1. <%= render :partial => "post", :object => @post %>
  2. <%= link_to 'Edit', edit_post_path(@post) %> |
  3. <%= link_to 'Back', posts_path %>

试一试

就是这样!现在你已准备好测试你的应用程序。首先,运行服务器。在 \blog 目录中的提示符下,输入:

  1. ruby script/server
回想一下,如果你没有使用默认端口 3000,则需要在 -p 之后指定实际端口号,如本章前面所述。 例如:ruby script/server -p3003

进入你的 Web 浏览器并输入以下地址(如果不是 3000,请再次使用实际端口号):

http://localhost:3000/posts

你应该看到你的页面的 index 页面处于活动状态。这是应该出现的…

让我们创建一个博客 - 图1

现在单击 New Post 链接。在“新建帖子”页面中,输入标题和正文。然后单击 Create

让我们创建一个博客 - 图2

显示的下一页是“显示页面”。这是由 show.html.erb 视图和 _post.html.erb 部分组合定义的。现在继续输入帖子并单击链接以浏览各种已定义的视图…

让我们创建一个博客 - 图3
如前所述,本章假定你以”原始的方式”使用 Rails,在系统提示符下输入所有必需的命令。某些 IDE 提供了更加集成的环境,允许你使用内置工具和实用程序生成和编写应用程序代码。你将在附录中找到一些 Ruby 和 Rails IDE 的概述。如果你使用的是 Ruby In Steel,你可以在 SapphireSteel Software 网站上找到本博客教程的替代版本,该教程使用 Ruby In Steel 的集成工具:http://www.sapphiresteel.com/How-To-Create-A-Blog-With-Rails-2