iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 8
0
Modern Web

Ruby礦工的Rails地圖系列 第 8

Top 10 common mistake for junior rails developer (6~10)

昨天談了 1~5
今天會從第六點繼續談起。

嚴格說來,6~10不能算是新手常遇到的錯誤
但只要是新手遇上了,很有可能不花個一天半天
是不可能解開的,因此我覺得相當有收錄的價值
畢竟我寫Top 10我也沒有說一定是出現頻率的Top 10
有可能是殺傷時間的程度XD

  1. 拼錯字與命名不一致
  2. 沒有重啟Server或console
  3. 測試效果與修改code的位置不一致
  4. nil method not fount
  5. DB不一致
  6. Ruby&Rails版本衝突
  7. session 毀損
  8. 找不到routes
  9. 圖片無法用get方法上傳
  10. view階段loop不小心印出值

Ruby&Rails版本衝突

如果遇上這個,真的會一頭霧水
但如果你現在還是新手,會遇上的機率相當低了
Ruby 2.2 & Rails 3.2 有衝突
如果不小心使用了
會在一些不應該出錯的地方
莫名其妙的出錯
如果真的遇到,建議升級版本
或是錯開這個組合,基本上就沒問題了。

session 毀損

如果專案有做到登入功能,就一定會使用session
有時候為了除錯,會使用byebug或是pry等工具設置中斷點
但中斷點有時會將session毀損
導致整個專案無法順利繼續運作

(錯誤畫面一直找不到)
但當我第一次遇到的時候
還以為哪個地方寫錯,所以切了幾個版本
發現都沒有用
後來是聽從前輩的建議清除session
rake db:sessions:clear

清除後就好了
在正式環境也遇上過,但是機率不高

找不到routes

新手剛開始使用routes時,很容易遇上找不到路徑的問題
明明寫法正確,但瀏覽器卻找不到

首先要檢查該有的參數都有傳入,確定不是因為參數為空值所導致
接著執行rake routes查詢,確認action與helper方法沒錯
這邊介紹一個小技巧,專案到後面routes會一大篇
所以可以加上filter(過濾器)
假如要找與website相關的routes如下
rake routes | grep website
這樣只會找到與website相關的內容

另一個常見的原因是沒有指定action
link_to預設是get,如果方法不同,會視為是不同的路徑
所以要確認方法有沒有正確指定
例如link_to "Foo", foo_path(foo), method: :delete

另外,routes的規則是越上面越優先
所以如果剛好有網址符合一個以上的規則,會先使用最上面的規則

圖片無法用get方法上傳

這可能也不算是新手常見的問題
但是卡了我兩天三
在某些情況下,上傳可能不是用預設內建的路由
但要特別注意,get方法是無法用來上傳圖片的
因為get是透過url來傳遞參數
當圖片轉為參數時,會超過網址參數可以儲存的上限
但不會有任何錯誤訊息

所以要傳圖片或其他檔案,記得使用put或post

view階段loop不小心印出值

最後一點可能有人會覺得是臨時加上來湊數的
沒錯!!
因為我一時想不到還可以寫哪點,但這點確實是新手錯誤
大概每個Rails工程師在新手時可能至少會犯一次

在View階段跑loop時,很自然是使用ruby的開始符號

<% Model.each do |model| %>
    ...
<% end %>

不小心手誤就會寫成

<%= Model.each do |model| %>
    ...
<% end %>

多了一個等號,與一般輸出的語法搞混
這個時候雖然loop可以正常執行
但是Model內容也會在頁面上印出
如果發生這種情況,很果斷的把多出來的等號刪除吧!

十個新手常見錯誤就先介紹這邊
未來如果想不到主題,可能會依序補上11~20
希望能節省未來開發者的一些時間


上一篇
Top 10 common mistake for junior rails developer (1~5)
下一篇
How to pass the value from controller to javascript
系列文
Ruby礦工的Rails地圖30

尚未有邦友留言

立即登入留言