此篇文章為筆者學習過程記錄的筆記
用來當作雲端記憶放置和學習交流使用
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
做專案時很多運算不能很有把握能有效運作,先寫測試再寫程式
Gem Faker
可在沙盒模式下作模擬
RAILS_ENV=test rails c --sandbox (在test模式下開沙盒)
RAILS_ENV=test rails server