Ruby on Rails 第一步 學習筆記


Nov 12, 2020

此篇文章為筆者學習過程記錄的筆記
用來當作雲端記憶放置和學習交流使用

Rails資料庫

Model: 大寫 單數 (虛擬 可看成軟體)
Table: 小寫 複數 (實體 可看成硬體)

會特別在Model設定Foreign Key 是為了不讓資料傳送時有斷頭的可能


執行專案前

遇到接手別人檔案但不確定版本是否相容時,最常用的是
$bundle install

bundle install 比 bundle update穩定因為使用bundle update時會將特定的Gem升級到最新版。

  • $Bundle update "Gem檔名"
    但當整包bundle有不相容的情況時就會產生問題,如果想將特定Gem升級更新,建議一次更新一個套件,避免找不到相容的套件.

  • $Gem install
    如果要將專案推到GitHub上最好也將更新過的Gemfile.lock 一起推到資料庫上,這樣協作者可以使用和你一樣的版本做專案。


使用終端機新增model方式:
$rails g model 檔名(開頭大寫單數) name :'string'
會自動新增一個db/migration(實體資料庫)

在DB上做實體驗證
MODEL本身個虛層,負責做虛擬驗證和資料看管,並不是實體資料庫
雖不是100%安全 因為實體驗證一被修改很可能可以繞過虛擬驗證去做修改

$rails c --sandbox 沙盒模式下可作一些安全變動
$rails -save 儲存後也不會改變專案,但可測試結果為何
$exit 跳出沙盒模式

$rails c(進入console模式下做資料庫查詢)

  • User.find_by 找到就有一筆資料 找不到就是nil
  • User.where 找到就有資料 找不到還是有一個空陣列

controller裡的render是用erb檔案做渲染
view的render叫做局部渲染 字串規則是要在檔案路徑下的檔名加底線

  • 關連式資料庫是ruby的強項

一開始新手可先從最底層的資料開始規劃順序: 品項表單 >> 訂單

在controller裡面養成習慣,即使沒有要做任何動作預備放一個action在裡面,方便日後維護。

class ItemsController < ApplicationController
  def index 
  end
end
  • 新增一個分類Category 的類別

$rails g scaffold Category name

會產生出已做好的品項再用Category包起來產生出有scaffold的架構

  • 新增一個migration
 $rails g migration add_categories_id_to_items
 $rails db:migrate


 做完$rails db:migrate之後發現資料寫成複數categories
 想改回category 現在只能用rollback去回溯

 !!!如果已經在migration裡面做了檔案rollback之後會被刪除!!!

 建議如果不想再重做請直接使用新增Migration做修正

 $rails db:rollback


 修改完migration裡的資料再做一次$rails db:migrate

 如果遇到想要新增migration裡面的資料欄位時
 要再新增一次??????


ViewHelper

把要給View的複雜的邏輯放到這裡做
不要全部都塞controller做成實體變數使用
分類功能讓之後維護更方便


Controller

檔名要用複數
手動在編輯器裡開Controller也可以
用終端機自動產生會生出其他頁面 各有好壞


安裝專案缺少Javascript的Gem

$yarn install--check-files


run help bin/webpack

終端機開這個可以加速瀏覽器顯示即時的修改畫面
$bin/webpack-dev-server


修改圖片大小的套件

$ brew install ImageMagicK

安裝完成後(會花一小段時間)


CDN

content deliver network

依賴網路的外表,除了自己私人練習不太建議用CDN,以防網路斷掉吃不到套件。

在Rails裡面做Bootsrap的CSS

rails 版本6已經可以把Bootstrap的CSS獨立一個檔案出來寫

Rspec

做專案時很多運算不能很有把握能有效運作,先寫測試再寫程式

參照[Unit Test]AAA原則

Gem Faker

可在沙盒模式下作模擬

RAILS_ENV=test rails c --sandbox (在test模式下開沙盒)

RAILS_ENV=test rails server

#Rails #RoR #ruby






你可能感興趣的文章

Day 85

Day 85

The introduction and difference between class component and function component in React

The introduction and difference between class component and function component in React

Replicate PDF deleter

Replicate PDF deleter






留言討論