Ruby on Rails入門 –寫第一個程序

寫之前要安裝好環境, 如果是windows請參看:

在Windows平台上學習Ruby on Rails 的環境準備

linux參看:

在ubuntu6.06上安裝apache2.2X + mysql + PHP + Ruby on Rails + Mongrel Cluster

mac參看:

從Ubuntu轉到Mac OS X

所有命令行在Ruby Console Window里輸入.

1.創建一個程序:work> rails demo
2.啟動內建的WEBrick服務器:demo> ruby script/server
WEBrick是用來調測ROR程序的理想Web服務器. 這個服務器定時刷新訪問服務器文件內容,方便調試.
如WEBrick非默認服務器,使用demo>ruby script/server webrick可以強制啟動這個服務器.
啟動後可用http://localhost:3000地址訪問.
3.URL解釋:
http://localhost:3000/demo/say/hello
相應功能如下:
http://域名/程序/Controller/Action

4.創建一個Controller: demo> ruby script/generate controller Say
修改相應文件/demo/app/controllers/say_controller.rb為
class SayController < ApplicationController
 def hello
 end
end
*使用def 定義Action
5.創建相應模板文件/demo/app/views/say/hello.rhtml
文件內容:
<html>
 <head>
  <title>Hello, Rails!</title>
 </head>
 <body>
  <h1>Hello from Rails!</h1>
 </body>
</html>
rhtml文件是ERb(Embedded Ruby)文件格式. 在調用時Rails將解釋裡面的Ruby語句.
如:
<ul>
 <li>Addition: <%= 1+2 %> </li>
 <li>Concatenation: <%= "cow" + "boy" %> </li>
 <li> 1.hour.from_now</li>
 <li>Time in one hour: <%= 1.hour.from_now %> </li>
</ul>
可訪問http://localhost:3000/say/hello查看效果.

中的<%=…%>內容將被解釋.

*<%=…%>和VBScript的功能相似.

為了使<%=…%>之間的內容不帶有HTML特殊符號,加強代碼安全性,可使用h()將特殊字符進行處理,如:
Email: <%= h("Ann & Bill <frazers@isp.email>") %>
上面的處理效果是:
Email: Ann &amp; Bill &lt;frazers@isp.email&gt;

通常的Ruby語句放在<%…%>內,如:
<% 3.times do %>
 Ho!<br />
<% end %>
Merry Christmas!

但會形成多餘的換行符,可以使用<%…-%>解決這個問題.
如:
<% 3.times do -%>
 Ho!<br />
<% end -%>
Merry Christmas!

6.讓頁面顯示動態內容
修改/demo/app/controllers/say_controller.rb為:
class SayController < ApplicationController
 def hello
  @time = Time.now
 end
end

修改/demo/app/views/say/hello.rhtml為:
<html>
 <head>
  <title>Hello, Rails!</title>
 </head>
 <body>
  <h1>Hello from Rails!</h1>
  <p>
   It is now <%= @time %>
  </p>
 </body>
</html>

*使用@time定義變量

將代碼和模板最大可能分離,以加強代碼的靈活度.
7.創建鏈接
修改/demo/app/controllers/say_controller.rb,加入googby action.如:
class SayController < ApplicationController
 def hello
  @time = Time.now
 end
 def goodbye
 end
end
新建Googbye action的相應模板
/demo/app/views/say/goodbye.rhtml,內容為:
<html>
 <head>
  <title>See You Later!</title>
 </head>
 <body>
  <h1>Goodbye!</h1>
  <p> 
   It was nice having you here.
  </p>
  <p>
   Say <%= link_to "Hello", :action => "hello" %> again.
  </p>
 </body>
</html>

*<%= link_to "Hello", :action => "hello" %> 用來創建一個指向hello action的連接.
link_to是一個"方法",也可以將後面的參數加上括號.
第一個Hello是要顯示的字符,後面一個hello是鏈接的目標action,因為在同一Controller之內,省略Controller參數.
8.在命令台按Ctrl+C終止WEBrick服務器.結束本章.

此條目發表在 Ruby on Rails 分類目錄。將固定鏈接加入收藏夾。

Ruby on Rails入門 –寫第一個程序》有 19 條評論

  1. LZHD 說:

    DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

  2. 易飛 說:

    寫得非常好,謝謝!

  3. rails 說:

    真的很好嗎?

  4. rubist@gmail.com 說:

    好個毛,這寫得叫好?真的是給一個對rails什麼都不懂的人看的入門?

  5. newruby 說:

    我怎麼不能打開啊,有研究這個的找我

    qq 149023032

  6. newruby 說:

    ruby script/generate controller Say

    應該改為

    ruby script/generate scaffold Say

  7. lxy 說:

    寫的好,一看就明白。

  8. 卯時下雨 說:

    回newruby,這裡
    ruby script/generate controller Say沒有錯.

  9. 不懂啊 說:

    Ruby Console Window 這是什麼?
    我的系統cmd 輸入不行啊

  10. 卯時下雨 說:

    要先準備的,已經在文章前面加了說明了.

  11. 大括號 說:

    這個例子有那麼點簡單啊

  12. brant 說:

    Routing Error

    No route matches “/say/hello” with {:method=>:get}

    是不是要配置 route

  13. brant 說:

    上面的問題解決了,謝謝

    之前我是先寫代碼,然後生成,結果就出問題了。

  14. lgf 說:

    非常感謝!很小的例子對入門啟發還是很大的。

  15. zgw06629@gmail.com 說:

    照您說的做了
    能打開http://localhost:3000/
    但打開
    http://localhost:3000/demo/say/hello 時提示
    We’re sorry, but something went wrong.

  16. lanvige 說:

    我的也出錯
    打開 http://localhost:3000/demo/say/hello 時提示 We’re sorry, but something went wrong.

    版本:
    ruby 1.9.1
    rails : 2.3.3

  17. minh15158 說:

    還好啦,對應controller和相應的方法,就么問題,不會出現陸由錯誤

  18. ss 說:

    http://localhost:3000/demo/say/hello 時提示 We’re sorry, but something went wrong

    http://localhost:3000/say/hello 時 is all right.

發表評論