ActionCable

Action Cable 毫無疑問地在 Rails的發展史上立下了ㄧ個重要的里程碑,它將 WebSocket 網路傳輸協定整合在 Rails 框架中,以 Pub/Sub 模式讓開發者得以實現即時更新的功能。

接下來需要先了解以下主題:

- Action Cable 基礎
- Sidekiq 基礎
- Redis 的基本認識
- Paranoia
- AASM — Ruby state machines
- simple_form

預計 Model 之間的關係會是這樣:

Image for post
Image for post

Step 1:建立使用者驗證機制

Step 2:建立商品的基本CRUD

Step 3:加入Action Mailer 寄信功能


Image for post
Image for post

實作之前準備:

第一步: 安裝 Redis 在 Heroku

登入 Heroku 後,在 dashboard 上點選 Resources 頁面,就會看到 Add-ons 的搜尋欄位。


Image for post
Image for post

Sidekiq 是ㄧ個功能齊全並且能夠快速處理背景任務的Ruby架構。它搭配Redis(key-value 的記憶體資料庫) ,提升性能及整合 Rails 的應用程式,例如處理大量耗時的計算、寄送電子信件、或是定期的報表製作。

此篇文章主要是記錄在撰寫專案中所遇到的坑,希望提供別人及自己往後的學習之用,如果內容有錯誤的地方,歡迎指正。

接下來需要先了解以下主題:

- Active Job 基礎
- Action Mailer Basics
- Redis 的基本認識

實作之前準備:

  • 一個部署在 Heroku 的 rails 專案
  • 註冊 Gandi 的域名 或是其他提供相同服務的 service provider (Mailgun)
  • 實作版本:ruby 2.6.3 以及 Rails 6.0.2

第一步:新增 Mailer

Rai …


Image for post
Image for post

TDD(Test-Driven Development)是什麼呢?

TDD 是一種以寫測試為驅動的開發模式,也就是先把規格及測試寫好、再開發需要的程式撰寫。對剛學習程式語言的人來說,或許有點難想像要如何測試尚未存在的程式。在寫此文章的當下,其實我也未開發標籤功能在專案上,希望藉由體驗 test-driven development 來完成此功能並記錄遇到的問題。

事前準備

本範例使用以下 gem

  • rspec-rails
  • faker
  • 任務基本CRUD (基本就不特別說明了)

標籤功能

“ 關鍵字或分配物品的信息資料,包含敘述子與物件關連性的一種元數據 ”

在此次的實作,標籤將會是以字串的型態來描述任務內容,進而讓其他使用者可以進行搜尋。目前可以安裝 acts-as-taggable-on 來幫助我們實現標籤的功能,但維護更新的次數似乎是一年ㄧ次,所以嘗試從無到有來建立標籤功能吧!

規格

  1. 如果標籤建立 …

Image for post
Image for post

承接上一篇 “快速實作使用者驗證機制”,接著要建立後台管理的部分

目標:

  1. 建立管理選單- 可將使用者分為管理員和一般使用者
  2. ㄧ般使用者無法登入後台,如存取管理頁面時,將被提示權限不足訊息無法存取,並轉向適當頁面
  3. 管理員能在後台更新使用者角色,並且刪除使用者後,也一併刪除該使用者的任務

Routes

要建立後台之前,要先想好之後的路徑要怎麼設計?我們可以選擇加 admin 在路徑前面,再使用 namespace 方法把 resources 包起來


Image for post
Image for post

在Rails框架裡要實作會員登入及登出功能,可以有幾種做法來實現,本篇將以較為易懂的概念,來實作如何透過 BCrypt gem 管理身份認證。

接下來需要先了解以下主題:

- BCrypt 是什麼
- Session 、Cookie、Token 有什麼不一樣呢?

實作之前準備:

  • 基本 User CRUD
  • 實作版本:ruby 2.6.3 以及 Rails 6.0.2
  • 完成建立 User model(Username and Email)

第一步: 安裝 BCrypt gem

Gemfile 裡已經有BCrypt了,只需要把註解拿掉,然後再 bundle install 執行安裝即可。


Image for post
Image for post

前不久練習手刻 Rails 的會員系統,在建立使用者驗證機制時,通常我們會用 使用者名稱(Username), 電子信箱 (E-Mail) 及 密碼(Password) 來建立 User 表單。基於資安的保護,使用者在表單所填寫的密碼並不會直接儲存到資料庫內,而是先將密碼加密完成後的hash,再存到資料庫裡。

舉例來說:當使用者建立帳戶時所輸入的資訊


如果有需要在儲存資料時要以integer型態寫入,但是呈現時希望用string表示。這個時候利用Enum設定欄位資料就是不錯的選項之一。

Image for post
Image for post

王建豪

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store