本教程介紹如何在 10 分鐘之內創建一個博客。本教程運行支持 Ruby 的 NetBeans IDE 6.0 (M10)。
內容
教程要求
本教程需要以下軟件:
l Java Standard Development Kit (JDK) version 6.0
l 支持 Ruby 的 NetBeans IDE 6.0 (M10)
設置
l 將 derbyclient.jar
(jdk1.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:在 database.yml 中開發數據庫配置
|
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: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.當運行數據庫遷移時執行 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:blog_controller.rb 的代碼
|
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: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 節點,然后選擇 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: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. 要首先用最新的條目顯示博客,請通過向 @posts in list.rhtml
的結尾添加 .reverse 顛倒排序順序:
<% @posts.reverse.each do |post| %>
當保存該文件并刷新您的瀏覽器時,該博客顯示如下: