本教程介绍如何在 10 分钟之内创建一个博客。本教程运行支持 Ruby 的 NetBeans IDE 6.0 (M10)。
内容
- |
教程要求 |
- |
设置 |
- |
创建 Ruby on Rails 项目 |
- |
配置数据库 |
- |
创建模型 |
- |
使用 Scaffold |
- |
迁移 Forward |
- |
使列表看起来更像博客 |
教程要求
本教程需要以下软件:
l Java Standard Development Kit (JDK) version 6.0
l 支持 Ruby 的 NetBeans IDE 6.0 (M10)
设置
l 将 derbyclient.jar
(jdk 1.6.0 _home/db/lib/derbyclient.jar
) 复制到您的 jruby lib 目录 (NetBeans_install_dir/ruby1/jruby-1.0/lib
)。
创建 Ruby on Rails 项目
1. 在 NetBeans IDE 中,选择 File > New Project。
2. 在 Categories 字段中选择 Ruby,在 Projects 字段中选择 Ruby on Rails Application,然后单击 Next。
3. 在 Project Name 字段中键入 RubyWebLog
,然后单击 Finish。
4. 浏览 Projects 窗口。如下图所示,Projects 窗口按类别对项目进行分组。展开每个节点可查看每个类别中的类型。
配置数据库
1. 在 Projects 窗口中,展开 Configuration 节点。
2. 打开 database.yml
。
3. 在 database.yml
中,删除 development:
下的默认数据库配置并替换为以下配置:
代码示例 1:在 |
adapter: jdbc driver: org.apache.derby.jdbc.ClientDriver url: jdbc:derby://localhost:1527/sample username: app password: app |
4. 确保您使用代码示例 1 中所示的正确格式。如果使用制表符,则可能会在迁移数据库时遇到错误。
5.打开 environment.rb
并在内容为 Rails::Initializer.run
do |config|
的行上面插入以下代码:
代码示例 2:Ruby 代码 |
if RUBY_PLATFORM =~ /java/ require 'rubygems' RAILS_CONNECTION_ADAPTERS = %w(jdbc) end |
6.打开 Services 窗口,展开 Databases 节点,并检查示例 {app on APP} 数据库是否已连接。
如果示例数据库标记的 jdbc 节点已中断,则 IDE 未连接到数据库。要连接到示例数据库,请右键单击示例数据库的 jdbc 节点,然后从弹出菜单中选择 Connect。如果出现 Connect 对话框,则对 Password 输入 app
,选择 Remember Password During This Session,然后单击 OK。
创建模型
在本部分中,您使用 Rails 生成器创建一个迁移。迁移是一种使用版本跟踪数据库更改的方式。
1. 切换回 Projects 窗口,右键单击 Model 节点,然后选择 Generate。
2. 在 Rails Generator 对话框中,在 Arguments 字段中键入 Post
,然后单击 OK。
作为模型生成的一部分,为您创建了一个迁移 001_create_posts.rb
:
3. 展开 Database Migrations > migrate 节点并打开 001_create_posts.rb
。
4. 如下图所示,向 up
方法中添加标题列(以粗体显示)
:
代码示例 3: |
class CreatePosts < ActiveRecord::Migration def self.up create_table :posts do |t| t.column "title", :string end end def self.down drop_table :posts end end |
5.当运行数据库迁移时执行 self.up
方法。当停止数据库时运行 self.down
方法。self.down
方法将数据库回滚到以前的版本。
6.在 Projects 窗口中,右键单击 RubyWebLog 节点,然后选择 Migrate Database > To Current Version。
该操作运行数据库迁移。输出窗口表示迁移 CreatePosts 的时间。下面是某些常见错误的纠正方法:
o org.jvyamlb.ScannerException: ScannerException null, mapping values are not allowed here
. 表示 database.yml
文件的格式有问题。请检查是否使用了制表符进行缩进。
o The driver encountered an error: cannot load Java class org.apache.derby.jdbc.ClientDriver
. 请验证是否如设置中所述复制了 derbyclient.jar
文件。
7.切换到 Services 窗口,展开 jdbc > Tables 节点查看生成的 posts 表以及关联的 schema_info 表。
如果没有看到新的条目,请右键单击 Tables 节点,然后选择 Refresh。
使用 Scaffold
在本部分中,使用 Ruby on Rails scaffold 功能。Scaffold 提供创建、编辑、查看和破坏博客中条目的基本界面。
1. 切换回 Projects 窗口,右键单击 Controllers 节点,然后选择 Generate。
2. 在 Rails Generator 对话框中,在 Name 字段中键入 Blog
。将 Views 字段保留为空。单击 OK。
3. 向 blog_controller.rb
中添加以下代码,该代码提供围绕该模型的一个简单的 CRUD 应用程序:
代码示例 4: |
class BlogController < ApplicationController scaffold :post end |
4. 在 Configuration 节点下,打开 routes.rb
并在最后一个 end
语句之前添加以下代码:
map.connect '', :controller => "blog"
5. 展开 Public 节点并删除 index.html
。
现在,当运行该应用程序时便会自动加载该博客。
6. 单击工具栏中的 Run Main Project 按钮启动 WEBrick 服务器并启动浏览器。
下面是该应用程序的第一个页面。
7. 单击 New post。
8. 输入一个标题,然后单击 Create。
下面是博客列表的示例。
迁移 Forward
在这里,您通过添加其他迁移(向编辑页面中添加正文)来更改数据模型。
1. 右键单击 Database Migrations 节点,然后选择 Generate。在 Rails Generator 对话框中,在 Arguments 字段中键入 AddBody
,然后单击 OK。
Ruby 便创建了一个名为 002_add_body.rb
的版本迁移脚本。
2. 按照如下方式修改 002_add_body.rb
:
代码示例 5: |
class AddBody < ActiveRecord::Migration def self.up add_column 'posts', 'body', :text end def self.down remove_column 'posts', :body end end |
3. 右键单击 RubyWebLog 节点,然后选择 Migrate Database > To Current Version。
4. 返回到浏览器并单击 Edit 链接查看 Ruby 如何识别新的正文字段。
5. 单击 Back 返回到 Listing Posts 页面,并创建更多博客条目。例如:
使列表看起来更像博客
到目前位置,scaffold 已经创建了一个基本的 CRUD 应用程序,使用该应用程序可以轻松测试该模式。这里您生成 scaffold,将其作为修改用户界面的基础。
1. 在 Projects 窗口中,右键单击 Views 节点,然后选择 Generate。
2. 在 Rails Generator 对话框中,从 Generate 下拉列表中选择 scaffold。
3. 在 Model Name 字段中键入 Post
,在 Controller Name 字段中键入 Blog
。保留 Actions 字段为空。单击 OK。
4. 展开 Views > blog 并打开 list.rhtml
。删除 <h1> 和 <table> 标记并将其替换为以下代码:
代码示例 6: |
<h1>The Ruby Blog</h1> <% @posts.each do |post| %> <h2><%= post.title %></h2> <p><%= post.body %></p> <small> <%= link_to 'Permalink', :action => 'show', :id => post %></small> <hr> <% end %> |
5. 保存 list.rhtml
并刷新您的浏览器。
6. 要首先用最新的条目显示博客,请通过向 @posts in list.rhtml
的结尾添加 .reverse 颠倒排序顺序:
<% @posts.reverse.each do |post| %>
当保存该文件并刷新您的浏览器时,该博客显示如下: