- 函數(shù)以問(wèn)號(hào)結(jié)尾的,說(shuō)明返回值是布爾值
- return高級(jí)寫(xiě)法
if ValidationCode.exists?(email: params[:email],kind: 'sign_in',created_at: 1.minute.ago..Time.now)
render status: :too_many_requests
return
end
相當(dāng)于
return render status: :too_many_requests if ValidationCode.exists?(email: params[:email],kind: 'sign_in',created_at: 1.minute.ago..Time.now)
- 執(zhí)行命令
rspec
會(huì)測(cè)試spec
目錄下的所有文件
- 優(yōu)化點(diǎn):盡量把controller寫(xiě)短一點(diǎn),如果有跟數(shù)據(jù)有關(guān)的操作都寫(xiě)到相關(guān)的model里面
- 枚舉值: 在model里寫(xiě)
enum kind: { sign_in: 0, reset_password: 1 }
,但是數(shù)據(jù)庫(kù)還是存的int
-
:xxx
代表是嚴(yán)格版的字符串,只讀的,沒(méi)有什么api可以用
- 路由針對(duì)
index
必須用resources
,resource
對(duì)應(yīng)的是show
- model里有鉤子函數(shù),可以合理利用
-
if !canSignIn
=> if not canSignIn
=> unless canSignIn
- 判斷是不是測(cè)試環(huán)境 :
if Rails.env.test?
- jwt三部分:
算法類(lèi)型
.用戶(hù)信息
.加密密文
-
window.atob
/window.btoa
:解碼/編碼 base64字符串
- 挽救錯(cuò)誤
rescue
- 相對(duì)路徑引用:
require_relative '../xxx'
- rspec 測(cè)試指定test: 1.
rspec -e "分頁(yè)"
2. rspec "./spec/requests/items_spec.rb:5"
5
是行號(hào) 3.rubymine 自帶的測(cè)試按鈕
- 標(biāo)準(zhǔn)時(shí)區(qū)(0時(shí)區(qū)):
Time.new(2018,1,1,0,0,0,'Z')
- 時(shí)間的邊界情況:
直接用字符串,就不會(huì)出現(xiàn)時(shí)區(qū)歧義
,item1 = Item.create amount: 100, created_at:"2018-01-01"
- rspec 跳過(guò)測(cè)試:
xit ...
-
bin/rails g model tag user:references
代表是引用,會(huì)在數(shù)據(jù)表里自動(dòng)變成 user_id
,還會(huì)在model里加belongs_to
- permit 代表只允許參數(shù)是 name 或 sign,如果傳了就獲取,不傳就不變
tag = Tag.find params[:id]
tag.update params.permit(:name, :sign)
- nil?只會(huì)判空,tag.errors.empty? : empty?還會(huì)去看數(shù)組的長(zhǎng)度是否為0
-
tag.reload
重新
從數(shù)據(jù)庫(kù)加載
這個(gè)tag數(shù)據(jù)
- if not 可以換成 unless
- model里validates是標(biāo)準(zhǔn)校驗(yàn),validate是自定義校驗(yàn)
- .map{|t| t.id} => .map(&:id)
-
create
不會(huì)報(bào)錯(cuò),create!
會(huì)報(bào)錯(cuò)
- 根路由可以用
root 'home#index
代替
-
User.create
執(zhí)行的是 model
的方法,而controller
里的create是針對(duì)的路由
的create
-
user = User.find_or_create_by email: params[:email]
的find_or_create
直接會(huì)創(chuàng)建用戶(hù)