5 days ago

Objective
應該輸入大寫,但輸入小寫,這樣也會出現 "bug"

(1) 4-5 測試登入登出流程
教程:要輸入 Log in ,但輸入 log in

(2) 5-4 測試登入登出API
教程:要輸入 Ok ,但輸入 ok

Reflective
檢查2.3遍都沒有發現,發現時,只能說"真是的"唉"
終於找到了,又過一關。

Interpretive
再一次證明編程的世界,不容許一絲一毫錯誤。就像每個螺絲釘要栓緊一樣,一個最小的螺絲釘鬆脫了,會影響到整體的運作。

Decisional
繼續探索,前進。

 
10 days ago

使用 rails-erd 这个 gem 可以分析 Rails 产生 ERD 图表,分析手上的项目。

step1: 安装 graphviz 工具。

Mac
在Terminal執行 brew install graphviz

step2: 安裝 gem 'rails-erd'

Gemfile 加入這行
gem 'rails-erd'
在Terminal执行 bundle install

step3: 在Terminal执行 bundle exec erd

会在本地生成一個‘erd.pdf’ 文件

step4: 在Terminal执行 open .

打開這個項目專屬的資料夾,會搜尋到 ‘erd.pdf’,點選打開,即出現。

 
20 days ago

Objective
在 Web API 實作 遇到兩個bug

1.在3-7教程https://fullstack.xinshengdaxue.com/posts/1021
在Postman 輸入完Body參數 send送出
得到 "訂票失敗 seat_number: "can't be blank"的結果
反覆檢查輸入code(先用手打輸入),後來用粘貼,還是得到一樣的結果
最後回到Postman上,在輸入Body參數最右邊 "Bulk Edit"按一下,切換為 Key-Value Edit
看到
train_number:0822
seat_number .....................:5A
custer_name..........:gitz
custer_phone:88888888
上面 ..........為空格,手動可以刪除空格(但在輸入Body參數時,完全沒有空格),刪除後,
就解除了這個 bug.

2.在7-5教程https://fullstack.xinshengdaxue.com/posts/1041

畫面和教程不一樣,也反覆檢查,後詢問Slack助教,知道檔名打錯
修改方式:
原生成檔案 touch app/views/api/v1/trains/index.json.jubilder
刪除檔案 rm app/views/api/v1/trains/index.json.jubilder
再生成檔案 touch app/views/api/v1/trains/index.json.jbuilder
解除了這個bug.

Reflective
出現bug,真的考驗耐心。
解了就真的豁然開朗。

Interpretive
覺得手打code, 雖會遇到bug,但會開始去尋求解決的方法,是很好的學習。

Decisional
繼續往前,並復習之前的教程。

 
25 days ago

&&參考特別推薦--blog.xdite.net

helper_method

在 controller 裡面的 method 不能在 view 裡面用。

也就是在

class ProductsController
def find_cart
@cart = Cart.find(session[:cart_id])
end
end
View 裡面不能用

<%= find_cart.items %>

拉這個 cart 出來直接用。

如果你要在 controller 和 view 都能拉現在的購物車,必須要用 helper_method 宣告這是一個 controller 級的 helper。

class ApplicationController
helper_method :current_cart
def current_cart
cart = Cart.find(session[:cart_id])
return cart
end
end

這樣你就能在 View 裡面用 current_cart。

<%= current_cart.items %>

或者是 Controller 裡面也能用 current_cart。

class ProductsController
def add_to_cart
find_cart.items << @product
end
end
view_context
在 helper 裡面的 method 不能在 controller 裡面用。
也就是在

class ProductsController
def show
@page_description = truncate(@product.desc, :lenght => 50 )
end
end
是不會動的。

如果要在 controller 裡面取用系統內建的 Rails View Helper,或自定義的 View Helper。
必須要用 view_context 去調用。

class ProductsController
def show
@page_description = view_context.truncate(@product.desc, :lenght => 50 )
end
end

小結
但基本上還是建議在 View Helper 與 Controller 的 code 不要互相混來呼叫來呼叫去。讓 View 歸 View,Controller 歸 Controller。若真有業務上的需求需要「到處都可以用」。建議寫 Module 掛在 lib 用 mixin 技巧混入。

 
25 days ago

&&參考特别推荐!!!捷姆斯——Rails中的 session 與 cookie

什麼是 session

舉個簡單的例子

我去買雞排,結帳後老闆給我一張號碼牌
等到炸好後在用號碼牌來領雞排

session 就是那張號碼牌,由那家雞排店的老闆發給你,記得這個雞排是誰的

在Rails中,每個新的使用者進入到網站,且需要用到session時,會自動產生一組給該使用者

識別方法:利用亂數產生32byte的數字(16進制)欄位id

這個id會在seesion產生時,也順便存在Client端的cookie中,供以後使用

除了識別欄位,session還允許你存入你想要存的資料

不過由於大小有限,儲存資料越簡單越小越好

以下列出使用session建議

可以存入的資料:數字、字串
不可以存入的資料:Object
關鍵性資料建議不要儲存
經常變動的資料建議不要存

什麼是 cookie

剛剛的 session 是你每次去雞排店,都會拿到新的一張號碼牌

而cookie就是那間雞排店發給你一張會員卡,記錄你的個人相關資訊

既然會員卡放在使用者身上

使用者可以自行丟掉(自行刪除cookie)
到期日到了自動失效(cookie過期會不能使用)
也就是說,我把一些不重要的資訊,存在使用者的電腦中
下次使用者進來,我可以很快的知道他的喜好

它的儲存空間為 4kb

為什麼要用 session 跟 cookie?

我們要先知道 HTTP 是 一個 stateless(無狀態) 的 protocol

什麼意思?

沒有session,伺服器就不能識別,誰正在使用我的網站

那為什麼要用cookie?

使用者跟伺服器沒有一直保持連線的狀況,所以在Cline操作的時候
可以將資料存在cookie,需要連線時在一起將資料送給server

可以想成,跟店家拿菜單,自己畫好要吃什麼後,在送給店家處理

就是伺服器不想要記住所有人的個人化資訊,你提供給我即可

Rails 內如何操作 session?

指定:session[:cart_id] = cart.id
讀取:session[:cart_id]
刪除:session[:cart_id] = nil
清空:reset_session

 
25 days ago

在Rails中下面幾種情況被定義是blank:

nil或是false
只由空白組成的字串
空陣列或是空Hash
任何物件當使用empty?方法呼叫時回應為true時
在Ruby1.9中的字串支援辨識Unicode字元,因此某些字元像是U2029(分隔線也會被視為是空白。
以數字來說,0或是0.0並不是blank

舉例來說在ActionDispatch::Session::AbstractStore中就使用了blank?方法來確定session key是否存在:

def ensure_session_key!
if @key.blank?
raise ArgumentError, 'A key is required...'
end
end

present?方法就是blank?方法的相反,判斷是否存在,因此present?方法與!blank?方法兩者表達的意思是一樣的。

 
25 days ago

||= 是什麼意思?
首先“||=” 是在ruby裡面是一個條件運算符号。

通常的解釋是 a || = b ===》 a || a = b但是這樣並不是特别準確。

這個解釋表示“如果 a 是false,nil 或者 undefined,那麼評判 b 並且將结果設置判定给 a 。

在ruby‘s 短回路計算中這樣解释:如果 a 是定義過的或者判定是 true,那麼運算符號右手邊的值就不會被判定,也就没右手邊的值什么事了。

當 a 和 b 都是 本地 變量时,區别不重要。但如果它們是類别的 獲得/設置 方法 那就很重要了。

比如:

a ||= 1;
=> 1
a ||= 2;
=> 1

foo = false;
=> false
foo ||= true;
=> true
foo ||= false;
=> true

這例子很好的解释了,當 a 已经定義好,那麼 a 就是那本身的值。
如果 a 是false ,那麼 a 就會 判定 b 值 並將结果設置為 a 的值。當 a 的值再次定義好後,就不会理 b 值了。

 
26 days ago

聽了 nic老師 5月25日直播 覺得Autosize這個插件很好用,把它紀錄下來:

Step1:打開 google 搜尋 "autosize"

Step2:找有"Github"的網站,沒有的話,找原本的網站

Step3:

Step4:下載後的資料夾為 "autosize" 打開資料夾,再繼續往下打開"dist"資料夾,會出現
autosize.js --想要更改,請用此檔。
autosize.min.js --此為被壓縮過,檔案較autosize.js小,檔案大小會影響到網站載入的速度,一點點都會影響, 不想修改,想直接用,請用此檔案。

Step5:打開 Terminal (現在 JDstore),輸入 open . ,出現 JDstore資料夾,打開vendor資料夾,打開assets資料 夾,打開javascripts資料夾,複製 autosize.min.js 至此。

Step6:載入 app/assets/javascripts/applications.js

      + //= require autosize.min
        //= require_tree

Step7:修改 app/views/admin/products/new.html.erb
放在最後

Step8:修改 app/views/admin/products/edit.html.erb
放在最後

Step9:刷新,讓您在輸入商品描述能很清楚

 
about 1 month ago

Objective
做到購物網站,遇到bug時,不像剛開始心慌意亂,照教程做一定沒問題,肯定一定能解,可能是代碼輸入錯誤·符號漏打·代碼有頭沒尾。
在幫助論壇中,看到 Baizhikang 分享atom 超省時 超方便 小功能 (感謝分享)
請看這個鏈結https://forum.qzy.camp/t/atom/1319
該您代碼有頭有尾,不怕漏打,也不會因代碼太長對齊不好看,而且真的超省時。

例如:
1.輸入 div 2.按 tab鍵 3.會產生


1.輸入 p 2.按 tab鍵 3.會產生


以下代碼也是如此,代碼+Tab鍵,

Reflective
照教程做,能動真的很開心。

Interpretive
遇到bug,請回教程核對,一定找得到出狀況的點。

Decisional
繼續讓 JDSore 更完整。

 
about 1 month ago

做完三遍 Job listing 遇到的其他的 bug

1.出現 紅色報錯-- "end" 在這個file的最後一行
出現 end 時,並非指向直接錯誤的指令,要重新檢視這個file,我的錯誤在
def
.
.

if
.
.

end

if指令後少了 "end" ,導致 bug

2.非紅色報錯,但畫面不正確

錯誤畫面

原因如下

補打指令後,正確畫面