如何修改Rails預設腳手架的模板

你好世界請叫我布拿拿發表於2017-12-08

在使用Rails的時候,對於scaffold這個操作並不陌生,因為在很多入門的教材中就會教你使用rails g scaffold book titile:string author:string 這個命令去建立一個預設的scaffold,這個操作會幫你建立model、view、controller、test、assets、routes等等各種東西,不得不說,這樣真的是能夠少寫很多程式碼。

但是,實際上,在對於一個小型的原型,這個操作生成的scaffold的樣式並不能達到你滿意的效果,因為自帶的樣式是非常有限的,但是在積累了一些專案的經驗之後,比如你發現帶上bootstrap會使得樣式更加工程化一些,看起來不那麼的rusty。

綜上所述,我想要修改預設的generator生成的東西,這個之前看Simon使用過,但是沒有仔細的研究模板,所以今天正好抽了一個時間把這個東西講一下。

操作其實並不複雜,Google搜尋一下 how to change rails default scaffold template, 出來的結果基本上還是差強人意的。所以學會提問能夠使得你的工作效率太幅度的提升。在研究了一些問題之後,發現Rails Guides上面有一篇文章是告訴你如何去修改以及建立自己的generator。

Well, TL;DR

所以你需要操作的就是

mkdir -p lib/templates/erb/scaffold/

所以可以看到,如果在這裡面放了一些模板,Rails會去使用這裡面的模板而不是自帶的一個模板了。

於是你在裡面可以新建

touch index.html.erb _form.html.erb show.html.erb new.html.erb edit.html.erb

建立了以上之後,你就可以修改裡面的內容了。

至於內容在哪裡,當然是在rails的原始碼裡面咯,傳送門

當然你把那些東西都複製進去之後理論上你就覺得可以讓這些東西run起來了,實在是太年輕。有時候還很天真。他會給你報一個錯,告訴你model_resource_name找不到這個方法,你不需要擔心,因為既然我寫這篇文章就會告訴你裡面有兩個方法找不到咯。

一個是model_resource_name,另一個是singular_route_name,解決方案很簡單,替換成singular_table_name就可以了,至於為什麼。 你可以看另一個傳送門

以上。

Long live the Rails.

相關文章