本教程介紹如何在 10 分鐘之內(nèi)創(chuàng)建一個(gè)博客。本教程運(yùn)行支持 Ruby 的 NetBeans IDE 6.0 (M10)。
內(nèi)容
教程要求
本教程需要以下軟件:
l Java Standard Development Kit (JDK) version 6.0
l 支持 Ruby 的 NetBeans IDE 6.0 (M10)
設(shè)置
l 將 derbyclient.jar
(jdk1.6.0_home/db/lib/derbyclient.jar
) 復(fù)制到您的 jruby lib 目錄 (NetBeans_install_dir/ruby1/jruby-1.0/lib
)。
創(chuàng)建 Ruby on Rails 項(xiàng)目
1. 在 NetBeans IDE 中,選擇 File > New Project。
2. 在 Categories 字段中選擇 Ruby,在 Projects 字段中選擇 Ruby on Rails Application,然后單擊 Next。
3. 在 Project Name 字段中鍵入 RubyWebLog
,然后單擊 Finish。
4. 瀏覽 Projects 窗口。如下圖所示,Projects 窗口按類別對(duì)項(xiàng)目進(jìn)行分組。展開每個(gè)節(jié)點(diǎn)可查看每個(gè)類別中的類型。
配置數(shù)據(jù)庫(kù)
1. 在 Projects 窗口中,展開 Configuration 節(jié)點(diǎn)。
2. 打開 database.yml
。
3. 在 database.yml
中,刪除 development:
下的默認(rèn)數(shù)據(jù)庫(kù)配置并替換為以下配置:
代碼示例 1:在 database.yml 中開發(fā)數(shù)據(jù)庫(kù)配置
|
adapter: jdbc
driver: org.apache.derby.jdbc.ClientDriver
url: jdbc:derby://localhost:1527/sample
username: app
password: app
|
4. 確保您使用代碼示例 1 中所示的正確格式。如果使用制表符,則可能會(huì)在遷移數(shù)據(jù)庫(kù)時(shí)遇到錯(cuò)誤。
5.打開 environment.rb
并在內(nèi)容為 Rails::Initializer.run
do |config|
的行上面插入以下代碼:
代碼示例 2:Ruby 代碼
|
if RUBY_PLATFORM =~ /java/
require 'rubygems'
RAILS_CONNECTION_ADAPTERS = %w(jdbc)
end
|
6.打開 Services 窗口,展開 Databases 節(jié)點(diǎn),并檢查示例 {app on APP} 數(shù)據(jù)庫(kù)是否已連接。
如果示例數(shù)據(jù)庫(kù)標(biāo)記的 jdbc 節(jié)點(diǎn)已中斷,則 IDE 未連接到數(shù)據(jù)庫(kù)。要連接到示例數(shù)據(jù)庫(kù),請(qǐng)右鍵單擊示例數(shù)據(jù)庫(kù)的 jdbc 節(jié)點(diǎn),然后從彈出菜單中選擇 Connect。如果出現(xiàn) Connect 對(duì)話框,則對(duì) Password 輸入 app
,選擇 Remember Password During This Session,然后單擊 OK。
創(chuàng)建模型
在本部分中,您使用 Rails 生成器創(chuàng)建一個(gè)遷移。遷移是一種使用版本跟蹤數(shù)據(jù)庫(kù)更改的方式。
1. 切換回 Projects 窗口,右鍵單擊 Model 節(jié)點(diǎn),然后選擇 Generate。
2. 在 Rails Generator 對(duì)話框中,在 Arguments 字段中鍵入 Post
,然后單擊 OK。
作為模型生成的一部分,為您創(chuàng)建了一個(gè)遷移 001_create_posts.rb
:
3. 展開 Database Migrations > migrate 節(jié)點(diǎn)并打開 001_create_posts.rb
。
4. 如下圖所示,向 up
方法中添加標(biāo)題列(以粗體顯示)
:
代碼示例 3:001_create_posts.rb 的代碼
|
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.當(dāng)運(yùn)行數(shù)據(jù)庫(kù)遷移時(shí)執(zhí)行 self.up
方法。當(dāng)停止數(shù)據(jù)庫(kù)時(shí)運(yùn)行 self.down
方法。self.down
方法將數(shù)據(jù)庫(kù)回滾到以前的版本。
6.在 Projects 窗口中,右鍵單擊 RubyWebLog 節(jié)點(diǎn),然后選擇 Migrate Database > To Current Version。
該操作運(yùn)行數(shù)據(jù)庫(kù)遷移。輸出窗口表示遷移 CreatePosts 的時(shí)間。下面是某些常見錯(cuò)誤的糾正方法:
o org.jvyamlb.ScannerException: ScannerException null, mapping values are not allowed here
. 表示 database.yml
文件的格式有問題。請(qǐng)檢查是否使用了制表符進(jìn)行縮進(jìn)。
o The driver encountered an error: cannot load Java class org.apache.derby.jdbc.ClientDriver
. 請(qǐng)驗(yàn)證是否如設(shè)置中所述復(fù)制了 derbyclient.jar
文件。
7.切換到 Services 窗口,展開 jdbc > Tables 節(jié)點(diǎn)查看生成的 posts 表以及關(guān)聯(lián)的 schema_info 表。
如果沒有看到新的條目,請(qǐng)右鍵單擊 Tables 節(jié)點(diǎn),然后選擇 Refresh。
使用 Scaffold
在本部分中,使用 Ruby on Rails scaffold 功能。Scaffold 提供創(chuàng)建、編輯、查看和破壞博客中條目的基本界面。
1. 切換回 Projects 窗口,右鍵單擊 Controllers 節(jié)點(diǎn),然后選擇 Generate。
2. 在 Rails Generator 對(duì)話框中,在 Name 字段中鍵入 Blog
。將 Views 字段保留為空。單擊 OK。
3. 向 blog_controller.rb
中添加以下代碼,該代碼提供圍繞該模型的一個(gè)簡(jiǎn)單的 CRUD 應(yīng)用程序:
代碼示例 4:blog_controller.rb 的代碼
|
class BlogController < ApplicationController
scaffold :post
end
|
4. 在 Configuration 節(jié)點(diǎn)下,打開 routes.rb
并在最后一個(gè) end
語句之前添加以下代碼:
map.connect '', :controller => "blog"
5. 展開 Public 節(jié)點(diǎn)并刪除 index.html
。
現(xiàn)在,當(dāng)運(yùn)行該應(yīng)用程序時(shí)便會(huì)自動(dòng)加載該博客。
6. 單擊工具欄中的 Run Main Project 按鈕啟動(dòng) WEBrick 服務(wù)器并啟動(dòng)瀏覽器。
下面是該應(yīng)用程序的第一個(gè)頁面。
7. 單擊 New post。
8. 輸入一個(gè)標(biāo)題,然后單擊 Create。
下面是博客列表的示例。
遷移 Forward
在這里,您通過添加其他遷移(向編輯頁面中添加正文)來更改數(shù)據(jù)模型。
1. 右鍵單擊 Database Migrations 節(jié)點(diǎn),然后選擇 Generate。在 Rails Generator 對(duì)話框中,在 Arguments 字段中鍵入 AddBody
,然后單擊 OK。
Ruby 便創(chuàng)建了一個(gè)名為 002_add_body.rb
的版本遷移腳本。
2. 按照如下方式修改 002_add_body.rb
:
代碼示例 5:002_add_body.rb 的代碼
|
class AddBody < ActiveRecord::Migration
def self.up
add_column 'posts', 'body', :text
end
def self.down
remove_column 'posts', :body
end
end
|
3. 右鍵單擊 RubyWebLog 節(jié)點(diǎn),然后選擇 Migrate Database > To Current Version。
4. 返回到瀏覽器并單擊 Edit 鏈接查看 Ruby 如何識(shí)別新的正文字段。
5. 單擊 Back 返回到 Listing Posts 頁面,并創(chuàng)建更多博客條目。例如:
使列表看起來更像博客
到目前位置,scaffold 已經(jīng)創(chuàng)建了一個(gè)基本的 CRUD 應(yīng)用程序,使用該應(yīng)用程序可以輕松測(cè)試該模式。這里您生成 scaffold,將其作為修改用戶界面的基礎(chǔ)。
1. 在 Projects 窗口中,右鍵單擊 Views 節(jié)點(diǎn),然后選擇 Generate。
2. 在 Rails Generator 對(duì)話框中,從 Generate 下拉列表中選擇 scaffold。
3. 在 Model Name 字段中鍵入 Post
,在 Controller Name 字段中鍵入 Blog
。保留 Actions 字段為空。單擊 OK。
4. 展開 Views > blog 并打開 list.rhtml
。刪除 <h1> 和 <table> 標(biāo)記并將其替換為以下代碼:
代碼示例 6:list.rhtml 的代碼
|
<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. 要首先用最新的條目顯示博客,請(qǐng)通過向 @posts in list.rhtml
的結(jié)尾添加 .reverse 顛倒排序順序:
<% @posts.reverse.each do |post| %>
當(dāng)保存該文件并刷新您的瀏覽器時(shí),該博客顯示如下: