在使用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.