Ruby on Rails教學 Part 1 - Hello World Project

2018/05/22 posted in  Ruby on Rails comments

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