Ruby on Rails(簡稱Rails或RoR)是一個Ruby語言的Web開發框架,自2005年推出以來一直非常受歡迎。其特色是它致力以最少的code完成最多的功能,很多時候一行已經可以完成其他框架的一堆if-case(雖然有人會不喜歡自己的code太過於magical,包括我)。
以下按官方教學的流程,嘗試建立一個基本的Hello World project吧。
架構理念
- It is designed to make programming web applications easier by making assumptions about what every developer needs to get started.
- Rails is opinionated software. It makes the assumption that there is a "best" way to do things.
- Don't Repeat Yourself (DRY)
- Convention Over Configuration
"Hello World" project
安裝
$ ruby -v
$ sqlite3 --version
$ gem install rails
$ rails --version
建立及運行
$ rails new blog
$ cd blog
$ bin/rails server
Browse http://localhost:3000.
Project Structure
以下只列重要的:
.
├── Gemfile # Project dependencies
├── Rakefile # Makefile in Ruby syntax
├── app # 你的整個application,包括models, views, controllers等等
├── config # 就是config啊
├── db # 就是database啊
├── package.json # npm dependencies,例如以前用jquery需要serve一個static js library file,現在可用npm package代替
├── public # 放置static files
├── test # Test files
└── vendor # 通常用來放3rd-party gems
新增一個page
先新增page相關的檔案
Create a new controller and view.
$ bin/rails generate controller Welcome index
create app/controllers/welcome_controller.rb
route get 'welcome/index'
invoke erb
create app/views/welcome
create app/views/welcome/index.html.erb
invoke test_unit
create test/controllers/welcome_controller_test.rb
invoke helper
create app/helpers/welcome_helper.rb
invoke test_unit
invoke assets
invoke coffee
create app/assets/javascripts/welcome.coffee
invoke scss
create app/assets/stylesheets/welcome.scss
新增了甚麼?
- 新controller:
app/controllers/welcome_controller.rb
- 新view:
app/views/welcome/index.html.erb
- 其他:
app/helpers/welcome_helper.rb
app/assets/javascripts/welcome.coffee
app/assets/stylesheets/welcome.scss
Namespacing
由此可見每次新增controller和view都會在:
app/controllers/*_controller.rb
app/views/welcome/*.html.erb
如果想更仔細分folder,可以在controller的名字前加上:
$ bin/rails generate controller home/welcome index
這個page應顯示甚麼?
改一下這個新的view:
<h1>Hello, Rails!</h1>
怎樣到達這個view?
Route "request to home page" to the new controller:
Rails.application.routes.draw do
get 'welcome/index'
root 'welcome#index' # add this line
end
解釋
get welcome/index
代表將/welcome/index
的request都交給welcome
controller中的index
action處理。- 如
/welcome/hello
就是同一controller的hello
action,如此類推。
- 如
root welcome#index
代表將/
(root)的request都是交給welcome
controller的index
處理。(注意這裡是#
)
查看 http://localhost:3000 或者 http://localhost:3000/welcome/index.
建立一個Sample Application
篇幅所限,請參閱Rails的官方教學。
這部分主要嘗試:
- 建立一個新resource
- 建立對應的model、view和controller
- 嘗試Rails提供的
.erb
template rendering方法 - 為controller加入對應Frontend的CURD功能
- 體驗Rails「背後幫你全部處理好了」的威力
RESTful API Server
以上的例子是一般後台渲染(Server-side rendering)的網頁結構。如果只想用Rails作為Backend,支援Frontend application、提供RESTful API等等,可以參照官方的文檔 - API-only application。