安裝 gem install rails

檢查 rails -v

查詢安裝路徑 which rails

開新專案 rails new 專案名

執行 server: $ bin/rails serveror$ rails s

Rails 常用快速鍵

原本的指令 簡寫 用途
bin/rails generate bin/rails g 用來產生各種需要的檔案,例如 scaffold、controller、model 等等
bin/rails destroy bin/rails d 可刪除產生器所產生的檔案
bin/rails server bin/rails s 啟動 Rails 伺服器,讓你可以檢視目前專案的成果
bin/rails console bin/rails c 類似 Ruby 的 IRB 介面,但是有載入整個 Rails 專案的環境,可以在這裡直接操作資料
bin/rails dbconsole bin/rails db 直接進到資料庫裡,使用 SQL 語法對資料庫進行存取
bundle install bundle 安裝套件
rake test rake 執行測試

ERb 語法標籤

<% %> 不會輸出內容
<%# %> 註解

yield

<%= yield :my_title %> 將這個坑標記為 my_title

<% provide :my_title, "填坑內容" %>
<%= content_for :my_title do %>
填坑內容
<%= end %>

CRUD = Create, Read, Update, Delete

1. 新增 Route

在對應的 controller 加入 resources :name 建立8種對應的路徑
執行 rails routes 查看路徑清單。

2. 新增 Controller

3. 新增 Action

4. 新增 Model

新增完畢後執行 db:migrate 轉換成真正的表格。

  • Add new value/column

  • 新增一欄資料:gender, type:integer 到 Candidates 內
    ⇒ rails generate migration AddGenderToCandidates gender:integer
    執行 db:migrate

    Models 之間的連動

5. 新增 VIEWS.html.erb

Default layout:

  • partial render 相關:

陣列型Collection
如果是陣列的資料,像是tr或li這類會一直重複的Template元素,我們可以使用collection參數來處理,例如像以下的程式:

    <% @people.each do |person| %>
        <%= render partial: "person", :locals { :person => person } %>
    <% end %>

我們可以改寫成使用collection參數來支援陣列形式:

    <%= render partial: "person", collection:  @people %>

CRUD

Read

Search by id

Candidate.find_by(id: params[:id]) # return nil if no result.

or

Candidate.find(params[:id]) # ActiveRecord error, if no result (we can rescue for).

all, where, order, limit, count, average, sum, maximum, minimum
Candidate.where("age > 18", gender: "female")

Candidate.order(age: :desc) # 按照年齡大小,由大排到小

Candidate.average(:age).to_f

Update

save, update, update_attribute, update_attributes(equals "update")

Destory

delete, destory

Candidate.destory_all("age < 18")

資料庫

Migration

  • 執行遷徙: bin/rails db:migrate
  • 退回遷徙:bin/rails db:rollback 因為會刪除原有資料,故使用上需注意風險,建議直接新增一個Migration 做修正
  • 檢視遷徙狀態:bin/rails db:migrate:status ( UP 表示已執行過)

results matching ""

    No results matching ""