iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
1
自我挑戰組

關於 Ruby on Rails 的那些事系列 第 13

Day 13 - Controller 控制誰?

  • 分享至 

  • xImage
  •  

controller 最主要的工作是處理和回應客戶端的輸入和互動。
一段網址進來,routes 會帶你去對的地方
先找第一層:controller
再來找第二層:action
最後一層找到:id

延續昨天的例子,小明自己架了一個部落格網站,想把這個架設網站的過程寫成文章,所以他開啟網頁,連進網站https://mingblog.tw

新增一篇文章,網址如下:

黃色框框表示為 controller,名為 articles
綠色框框表示為 action,是一個 new 方法,寫在 articles_controller.rb 這個檔案中
透過網址可以知道要走哪一條路徑來操作資源,是不是很好懂呢?

寫沒多久,小明肚子餓了,想先把文章告一段落,送出文章後,就出門吃宵夜。吃飽喝足的小明突然想到還有個內容寫錯了,又趕緊打開文章列表,點擊剛剛的文章,並且進入編輯頁面去修改內容,網址如下:

因為還是對同樣的資源操作,所以還是對應到articles_controller.rb,但是這次是走編輯畫面,所以用edit 這個 action 來執行,最重要的是 id 不能忘記!與剛剛新增的情況不同,因為新增前是還沒有存入資料庫的東西,因此不會有 id,一旦存入資料庫,才會產生流水編號 id。也因為你對某一篇文章要進行編輯,故必須要告訴資料庫,小明現在要更動的是 id 為 1 的文章。

文章可以新增 ( create )、讀取 ( read )、修改 ( edit )、刪除 ( destroy ),把握一個原則,當你要執行某個動作是需要針對某篇文章時,就要記得把 id 帶入。以下是 controller 基本設計。

# articles_controller.rb

class ArticlesController < ApplicationController
  def index
    # 可能文章列表頁、或你想讓使用者看到的第一畫面
  end
  
  def show
    # 是單一文章的頁面、可以看到某篇文章的內容或留言
  end
  
  def new
    # 這是一個新增文章的畫面
  end
  
  def create
    # 這是一個動詞,會處理 new 畫面的表單,告訴 model 這要寫入資料庫
  end
  
  def edit
    # 這是一個編輯文章的畫面
  end
  
  def update
    # 這是一個動詞,會處理 edit 畫面的表單,告訴 model 這要寫入資料庫
  end
  
  def destroy
    # 這是一個動詞,會進行刪除,告訴 model 這要從資料庫移除
  end
  
end

參考資料:
https://dotblogs.com.tw/dog0416/2016/05/26/235802

學無止盡,每天都要進步一點點!


上一篇
Day 12 - Model 關聯性
下一篇
Day 14 - View 幫你包裝美美外殼
系列文
關於 Ruby on Rails 的那些事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言